{"schema":"threatline.record/2","record":{"id":"CVE-2026-104890","aliases":["GHSA-p279-5wcv-45vq"],"summary":"Kunstmaan CMS: MediaBundle extension blacklist bypass allows authenticated administrators to upload executable PHP files leading to remote code execution","details":"### Summary\n\nThe MediaBundle blocks dangerous upload extensions with a blacklist that was matched\ncase-sensitively, while the stored filename was lowercased afterwards. A file uploaded\nas `webshell.pHp` therefore bypassed the blacklist and was written to the web-accessible\nupload directory as `webshell.php`, where the web server executed it. Any authenticated\nbackend user with access to the media section could obtain remote code execution.\n\n### Details\n\n`FileHandler::getFilePath()` rewrote blacklisted extensions to `.txt` using a\ncase-sensitive regex, and only then lowercased the extension when building the stored\nname — so the check ran against the attacker-controlled casing and the normalisation\nhappened after it.\n\nTwo further weaknesses contributed:\n\n* The default blacklist contained only `php` and `htaccess`, leaving other\n  server-executable extensions (`phtml`, `php5`, `phar`, `shtml`, `cgi`, …) unblocked\n  regardless of casing.\n* Configured blacklist values were interpolated into the regex unescaped.\n\n### Impact\n\nAn authenticated user with access to the admin media section can upload a file that the\nweb server executes as PHP. The uploaded file is reachable over HTTP without\nauthentication, giving arbitrary code execution as the web server user.\n\n### Patches\n\nFixed in kunstmaan/media-bundle 7.3.2. The extension is now normalised before it is\nchecked and compared with `in_array()`; the default blacklist is expanded to the full\nset of server-executable extensions; and a new opt-in `allowed_extensions` option allows\nprojects to enforce a strict allow-list.\n\nNote that the patch does not rename files already stored on disk. Sites should audit\ntheir media upload directory for existing files with an executable extension.\n\n### Workarounds\n\nIf you cannot upgrade, configure the web server to refuse to execute scripts in the\nmedia upload directory (for example a `location` block in nginx or `php_flag engine off`\nin Apache).","categories":["Libraries & packages"],"product":"kunstmaan/media-bundle","vendor":"Kunstmaan","ecosystem":"composer","affected_ranges":[{"source":"GitHub Advisory Database","source_url":"https://github.com/advisories/GHSA-p279-5wcv-45vq","source_modified_at":"2026-10-07T18:05:42Z","fetched_at":"2026-10-23T18:42:43.628194Z","package":{"ecosystem":"composer","name":"kunstmaan/media-bundle"},"range":"< 7.3.2"},{"source":"GitHub Advisory Database","source_url":"https://github.com/advisories/GHSA-p279-5wcv-45vq","source_modified_at":"2026-10-07T18:05:42Z","fetched_at":"2026-10-23T18:42:43.628194Z","package":{"ecosystem":"composer","name":"kunstmaan/bundles-cms"},"range":"< 7.3.2"},{"source":"CVE List","source_url":"https://www.cve.org/CVERecord?id=CVE-2026-104890","source_modified_at":"2026-10-07T20:50:50.492Z","fetched_at":"2026-10-23T18:45:31.882637Z","product":"KunstmaanBundlesCMS","vendor":"Kunstmaan","versions":[{"version":"< 7.3.1","status":"affected"}],"defaultStatus":null},{"source":"CVE List","source_url":"https://www.cve.org/CVERecord?id=CVE-2026-104890","source_modified_at":"2026-10-07T20:50:50.492Z","fetched_at":"2026-10-23T18:45:31.882637Z","product":"bundles-cms","vendor":"kunstmaan","versions":[{"version":"< 7.3.1","status":"affected"}],"defaultStatus":null},{"source":"CVE List","source_url":"https://www.cve.org/CVERecord?id=CVE-2026-104890","source_modified_at":"2026-10-07T20:50:50.492Z","fetched_at":"2026-10-23T18:45:31.882637Z","product":"media-bundle","vendor":"kunstmaan","versions":[{"version":"< 7.3.1","status":"affected"}],"defaultStatus":null},{"source":"OSV","source_url":"https://osv.dev/vulnerability/GHSA-p279-5wcv-45vq","source_modified_at":"2026-10-07T18:15:11.799807414Z","fetched_at":"2026-10-23T18:45:31.882637Z","package":{"name":"kunstmaan/media-bundle","ecosystem":"Packagist","purl":"pkg:composer/kunstmaan/media-bundle"},"ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"7.3.2"}]}],"versions":["3.0.0","3.0.1","3.0.2","3.0.3","3.1.0","3.1.1","3.1.2","3.1.3","3.1.4","3.2.0","3.2.1","3.2.1.1","3.2.2","3.2.3","3.2.4","3.2.4.1","3.2.5","3.2.6","3.3.0","3.3.1","3.3.2","3.3.3","3.3.4","3.4.0","3.4.1","3.4.2","3.5.0","3.5.1","3.5.2","3.6.0","3.6.1","3.6.2","3.6.3","4.0.0","4.0.0-RC1","4.0.1","4.0.2","4.0.3","4.1.0","4.1.1","4.1.2","4.1.3","4.1.4","4.2.0","4.2.1","4.2.2","4.2.3","5.0.0","5.0.0-RC1","5.0.0-RC2"]},{"source":"OSV","source_url":"https://osv.dev/vulnerability/GHSA-p279-5wcv-45vq","source_modified_at":"2026-10-07T18:15:11.799807414Z","fetched_at":"2026-10-23T18:45:31.882637Z","package":{"name":"kunstmaan/bundles-cms","ecosystem":"Packagist","purl":"pkg:composer/kunstmaan/bundles-cms"},"ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"7.3.2"}]}],"versions":["3.0.0","3.0.1","3.0.2","3.0.3","3.1.0","3.1.1","3.1.2","3.1.3","3.1.4","3.2.0","3.2.1","3.2.1.1","3.2.2","3.2.3","3.2.4","3.2.4.1","3.2.5","3.2.6","3.3.0","3.3.1","3.3.2","3.3.3","3.3.4","3.4.0","3.4.1","3.4.2","3.5.0","3.5.1","3.5.2","3.6.0","3.6.1","3.6.2","3.6.3","4.0.0","4.0.0-RC1","4.0.1","4.0.2","4.0.3","4.1.0","4.1.1","4.1.2","4.1.3","4.1.4","4.2.0","4.2.1","4.2.2","4.2.3","5.0.0","5.0.0-RC1","5.0.0-RC2"]}],"fixed_versions":[{"source":"GitHub Advisory Database","source_url":"https://github.com/advisories/GHSA-p279-5wcv-45vq","source_modified_at":"2026-10-07T18:05:42Z","fetched_at":"2026-10-23T18:42:43.628194Z","package":{"ecosystem":"composer","name":"kunstmaan/media-bundle"},"version":"7.3.2"},{"source":"GitHub Advisory Database","source_url":"https://github.com/advisories/GHSA-p279-5wcv-45vq","source_modified_at":"2026-10-07T18:05:42Z","fetched_at":"2026-10-23T18:42:43.628194Z","package":{"ecosystem":"composer","name":"kunstmaan/bundles-cms"},"version":"7.3.2"},{"source":"OSV","source_url":"https://osv.dev/vulnerability/GHSA-p279-5wcv-45vq","source_modified_at":"2026-10-07T18:15:11.799807414Z","fetched_at":"2026-10-23T18:45:31.882637Z","package":{"name":"kunstmaan/media-bundle","ecosystem":"Packagist","purl":"pkg:composer/kunstmaan/media-bundle"},"version":"7.3.2"},{"source":"OSV","source_url":"https://osv.dev/vulnerability/GHSA-p279-5wcv-45vq","source_modified_at":"2026-10-07T18:15:11.799807414Z","fetched_at":"2026-10-23T18:45:31.882637Z","package":{"name":"kunstmaan/bundles-cms","ecosystem":"Packagist","purl":"pkg:composer/kunstmaan/bundles-cms"},"version":"7.3.2"}],"cvss":7.2,"severity":"High","kev":{"listed":false},"epss":{"probability":0.00416,"percentile":0.34824,"score_date":"2026-10-23"},"published_at":"2026-10-05T15:46:21.959Z","modified_at":"2026-10-07T20:50:50.492Z","provenance":[{"source":"GitHub Advisory Database","url":"https://github.com/advisories/GHSA-p279-5wcv-45vq","fetched_at":"2026-10-23T18:42:43.628194Z","source_modified_at":"2026-10-07T18:05:42Z"},{"source":"CVE List","url":"https://www.cve.org/CVERecord?id=CVE-2026-104890","fetched_at":"2026-10-23T18:45:31.882637Z","source_modified_at":"2026-10-07T20:50:50.492Z"},{"source":"OSV","url":"https://osv.dev/vulnerability/GHSA-p279-5wcv-45vq","fetched_at":"2026-10-23T18:45:31.882637Z","source_modified_at":"2026-10-07T18:15:11.799807414Z"},{"source":"EPSS","url":"https://api.first.org/data/v1/epss?cve=CVE-2026-104890","fetched_at":"2026-10-23T18:42:43.628194Z","source_modified_at":"2026-10-23"}],"sources":["GitHub Advisory Database","CVE List","OSV","EPSS"],"references":[{"source":"CVE List","url":"https://github.com/Kunstmaan/KunstmaanBundlesCMS/security/advisories/GHSA-p279-5wcv-45vq","tags":["x_refsource_CONFIRM"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-104890","source":"GitHub Advisory Database"},{"source":"CVE List","url":"https://github.com/Kunstmaan/KunstmaanBundlesCMS/commit/1bbdfdeac8e7e91506b1a9271360b9b68d7690d3","tags":["x_refsource_MISC"]},{"source":"CVE List","url":"https://github.com/Kunstmaan/KunstmaanBundlesCMS/releases/tag/7.3.2","tags":["x_refsource_MISC"]},{"url":"https://github.com/advisories/GHSA-p279-5wcv-45vq","source":"GitHub Advisory Database"}],"locations":[],"motoko_assessment":{"status":"requires_architecture_review","automatic_remediation":false},"cve_state":"PUBLISHED","ssvc":{"exploitation":"none","automatable":"no","technical_impact":"total","assessed_at":"2026-10-07T20:50:41.475759Z"},"classification":{"method":"product-first software-layer rules","rules_version":"2.1","matched_on":"ecosystem","confidence":"heuristic","reviewed":false},"change_timestamp":"2026-10-07T20:50:50.492Z","content_hash":"7cb88004c9e16d56d666716ea1c156297991b9c996e240bcb1791ea6ad5d0ff5"}}
