CVE-2026-62230
Full vulnerability record from the local CVENow database.
Description
Grav before 2.0.4 ships a default .htaccess (and reference webserver-configs/htaccess.txt) whose rules blocking access to sensitive file types (.yaml, .php, .json, etc.) lack the [NC] flag, making extension matching case-sensitive. On case-insensitive filesystems (Windows/NTFS, macOS/HFS+, or Docker volume mounts), an unauthenticated attacker can request these files with uppercase or mixed-case extensions (e.g., .YAML, .PHP) to bypass the restrictions and read sensitive configuration files that may contain API keys and credentials.
Severity
HIGH
CVSS score
8.7
(v4.0)
Vulnerability status
Deferred
Source identifier
Published
2026-07-17 02:18:10.433000
Last modified
2026-10-24 20:10:00.137000
View original CVE JSON
{
"id": "CVE-2026-62230",
"sourceIdentifier": "[email protected]",
"published": "2026-07-17T02:18:10.433",
"lastModified": "2026-10-24T20:10:00.137",
"vulnStatus": "Deferred",
"cveTags": [],
"descriptions": [
{
"lang": "en",
"value": "Grav before 2.0.4 ships a default .htaccess (and reference webserver-configs/htaccess.txt) whose rules blocking access to sensitive file types (.yaml, .php, .json, etc.) lack the [NC] flag, making extension matching case-sensitive. On case-insensitive filesystems (Windows/NTFS, macOS/HFS+, or Docker volume mounts), an unauthenticated attacker can request these files with uppercase or mixed-case extensions (e.g., .YAML, .PHP) to bypass the restrictions and read sensitive configuration files that may contain API keys and credentials."
},
{
"lang": "es",
"value": "Grav anterior a la versión 2.0.4 incluye un archivo .htaccess predeterminado (y el archivo de referencia webserver-configs/htaccess.txt) cuyas reglas que bloquean el acceso a tipos de archivos sensibles (.yaml, .php, .json, etc.) carecen de la bandera [NC], lo que hace que la coincidencia de la extensión distinga entre mayúsculas y minúsculas. En sistemas de archivos que no distinguen entre mayúsculas y minúsculas (Windows/NTFS, macOS/HFS+, o montajes de volumen de Docker), un atacante no autenticado puede solicitar estos archivos con extensiones en mayúsculas o con una combinación de mayúsculas y minúsculas (por ejemplo, .YAML, .PHP) para eludir las restricciones y leer archivos de configuración sensibles que pueden contener claves de API y credenciales."
}
],
"affected": [
{
"source": "[email protected]",
"affectedData": [
{
"vendor": "getgrav",
"product": "grav",
"defaultStatus": "unaffected",
"repo": "https://github.com/getgrav/grav",
"packageURL": "pkg:composer/getgrav/grav",
"versions": [
{
"version": "0",
"lessThan": "2.0.4",
"versionType": "semver",
"status": "affected"
},
{
"version": "2.0.4",
"versionType": "semver",
"status": "unaffected"
}
]
}
]
}
],
"metrics": {
"cvssMetricV40": [
{
"source": "[email protected]",
"type": "Secondary",
"cvssData": {
"version": "4.0",
"vectorString": "CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:N/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.7,
"baseSeverity": "HIGH",
"attackVector": "NETWORK",
"attackComplexity": "LOW",
"attackRequirements": "NONE",
"privilegesRequired": "NONE",
"userInteraction": "NONE",
"vulnConfidentialityImpact": "HIGH",
"vulnIntegrityImpact": "NONE",
"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": "Secondary",
"cvssData": {
"version": "3.1",
"vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N",
"baseScore": 7.5,
"baseSeverity": "HIGH",
"attackVector": "NETWORK",
"attackComplexity": "LOW",
"privilegesRequired": "NONE",
"userInteraction": "NONE",
"scope": "UNCHANGED",
"confidentialityImpact": "HIGH",
"integrityImpact": "NONE",
"availabilityImpact": "NONE"
},
"exploitabilityScore": 3.9,
"impactScore": 3.6
}
],
"ssvcV203": [
{
"source": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
"ssvcData": {
"timestamp": "2026-07-17T14:08:46.289266Z",
"id": "CVE-2026-62230",
"options": [
{
"exploitation": "poc"
},
{
"automatable": "yes"
},
{
"technicalImpact": "partial"
}
],
"role": "CISA Coordinator",
"version": "2.0.3"
}
}
]
},
"weaknesses": [
{
"source": "[email protected]",
"type": "Secondary",
"description": [
{
"lang": "en",
"value": "CWE-178"
}
]
}
],
"references": [
{
"url": "https://github.com/getgrav/grav/security/advisories/GHSA-vwg3-w8w3-pc79",
"source": "[email protected]"
},
{
"url": "https://www.vulncheck.com/advisories/grav-file-access-bypass-via-case-variation",
"source": "[email protected]"
},
{
"url": "https://github.com/getgrav/grav/security/advisories/GHSA-vwg3-w8w3-pc79",
"source": "134c704f-9b21-4f2e-91b3-4a467353bcc0"
}
]
}