WP Manifestindependent plugin directory
manifest / integrations / zammad-wp

Zammad for WordPress WP Registry grade C-. High-severity findings · 1 findingWP RegistryHigh-severity findings · 1 findingOpen the reportC-

Zammad WordPress integration

★ 29stars
878release downloads
≈40active sites
181composer installs
v0.9.1latest · 3 years ago

Install

Download zammad-wp.zip From the v0.9.1 release on GitHub, Jan 23, 2023

Upload it under Plugins → Add New Plugin → Upload Plugin, then activate.

Install straight from GitHub with WP-CLI:

wp plugin install https://github.com/ouun/zammad-wp/releases/download/v0.9.1/zammad-wp.zip

On Packagist as ouun/zammad-wp:

composer require ouun/zammad-wp
No built-in updater. New versions won't appear under Dashboard → Updates. Install new releases yourself, or let Git Updater track the repository.

This plugin helps you embed Zammad Chats & Forms into your WordPress site and gives you Access to the Zammad API if required. It is based on WordPress best practise, keeping your workplace clean by using functions, hooks and filters instead of cluttered dashboard pages.

Documentation

As the documentation grows, please look at the Zammad WP Wiki.

Compatibility

Currently, Zammad WP is compatible with the following Form plugins to replace the Zammad standard form with custom & complex ones as documented in the Wiki.

Build the package

Webpack config

Webpack config files can be found in config folder:

  • webpack.config.dev.js
  • webpack.config.common.js
  • webpack.config.prod.js
  • webpack.settings.js

In most cases webpack.settings.js is the main file which would change from project to project. For example adding or removing entry points for JS and CSS.

NPM Commands

  • npm run test (runs phpunit)
  • npm run start (install dependencies)
  • npm run watch (watch)
  • npm run build (build all files)
  • npm run build-release (build all files for release)
  • npm run dev (build all files for development)
  • npm run lint-release (install dependencies and run linting)
  • npm run lint-css (lint CSS)
  • npm run lint-js (lint JS)
  • npm run lint-php (lint PHP)
  • npm run lint (run all lints)
  • npm run format-js (format JS using eslint)
  • npm run format (alias for npm run format-js)
  • npm run test-a11y (run accessibility tests)

Composer Commands

composer lint (lint PHP files)

composer lint-fix (lint PHP files and automatically correct coding standard violations)

Contributing

We welcome pull requests and spirited, but respectful, debates. Please contribute via pull requests on GitHub.

  1. Fork it!
  2. Create your feature branch: git checkout -b feature/my-new-feature
  3. Commit your changes: git commit -am 'Added some great feature!'
  4. Push to the branch: git push origin feature/my-new-feature
  5. Submit a pull request

Releases

10 releases. Each count is every asset in that release; expand a row for the breakdown.

Tag
Published
Assets
Downloads
v0.9.1 latest
Jan 23, 2023 3 years ago
zammad-wp.zip
446
Jan 17, 2023 3 years ago
zammad-wp.zip
10
Mar 2, 2021 5 years ago
zammad-wp.zip
326
Feb 24, 2021 5 years ago
zammad-wp.zip
11
Oct 30, 2020 5 years ago
zammad-wp.zip
61
Oct 29, 2020 5 years ago
zammad-wp.zip
6
Sep 9, 2020 6 years ago
zammad-wp.zip
4
Sep 8, 2020 6 years ago
zammad-wp.zip
5
Aug 24, 2020 6 years ago
zammad-wp.zip
5
Aug 23, 2020 6 years ago
zammad-wp.zip
4

Active-site estimate ≈40 comes from the median of recent superseded releases. Method.

C- grade

Security

Zammad for WordPress 0.9.1 · audited by WP Registry

High-severity findings.

1 high
Audited release
0.9.1
Findings
1
Worst severity
high
Content hash
613919aca9303a93af5605e5…

Findings

  • high Public HTML Forms action file_get_contents attacker-controlled tmp_name/dir paths into a Zammad ticket

    file_access

    zammad_hf_process_form_action is hooked to hf_process_form_action_zammad and runs for every unauthenticated HTML Forms submit whose form action type is zammad (HTML Forms registers wp_ajax_nopriv_hf_form_submit; this plugin adds no capability or nonce of its own). It walks $submission->data, treats any value for which hf_is_file() is true (array with name, size, and type — not is_uploaded_file()) as an attachment, and passes it to zammad_hf_prepare_attachments(). That helper does file_get_contents($file['tmp_name'] ?? trailingslashit($file['dir']).$file['name']) with no path allowlist, basename(), or URL-scheme block, then base64-encodes the bytes onto a ticket created with the site's Zammad API token. HTML Forms get_request_data() starts from $_POST and only overwrites keys that also exist in $_FILES, so a public POST can turn a non-file field (e.g. MESSAGE) into {name, size, type, tmp_name: '/var/www/html/wp-config.php'} or tmp_name=http://169.254.169.254/latest/meta-data/ while leaving EMAIL as a string. array_change_key_case() only uppercases top-level keys, so nested tmp_name/dir survive. Observable: the file or SSRF response is stored as a ticket article attachment in Zammad for the customer matching the submitted email (and may leave the host via Zammad notifications). Requires HTML Forms plus a form with the Zammad action, which is this plugin's documented integration, not a third-party bug.

    includes/functions/hf-plugin-integration.php:140-147,268-285

    Recommendation

    Only accept attachments that originated in $_FILES. Require is_uploaded_file($file['tmp_name']) before reading, or for Premium stored files resolve realpath() and reject anything outside the HTML Forms upload directory; never concatenate raw name onto dir. Block URL wrappers (http(s), ftp, phar, data). Use basename() on filenames sent to Zammad. Do not treat arbitrary POST arrays that happen to contain name/size/type as files.

WP Registry hashes the installable build and reports on that exact bytes-for-bytes copy. Embargoed findings are withheld until they are disclosed, so a clean verdict means nothing public is outstanding. WP Manifest does not audit code itself.