CVE-2015-4020
Status: ModifiedMedium (4.3)—
RubyGems 2.0.x before 2.0.17, 2.2.x before 2.2.5, and 2.4.x before 2.4.8 does not validate the hostname when fetching gems or making API requests, which allows remote attackers to redirect requests to arbitrary domains via a crafted DNS SRV record with a domain that is suffixed with the original domain name, aka a "DNS hijack attack." NOTE: this vulnerability exists because to an incomplete fix for CVE-2015-3900.
CVSS
- Version: 2.0
- Vector: AV:N/AC:M/Au:N/C:N/I:P/A:N
- Base score: 4.3
Exploitation probability (EPSS)
- Probability of exploitation in the next 30 days: 3.46%
- Percentile among all scored CVEs: 89
- Score date: 10/5/2026
EPSS (Exploit Prediction Scoring System, FIRST) estimates how likely a vulnerability is to be exploited in the wild within 30 days. It complements CVSS (impact) and CISA KEV (confirmed exploitation).
Affected technologies (2)
CWEs
- CWE-20
References
- http://blog.rubygems.org/2015/06/08/2.2.5-released.html
- http://blog.rubygems.org/2015/06/08/2.4.8-released.html
- http://www.oracle.com/technetwork/topics/security/bulletinoct2015-2511968.html
- http://www.securityfocus.com/bid/75431
- https://github.com/rubygems/rubygems/commit/5c7bfb5
- https://puppet.com/security/cve/CVE-2015-3900
- https://www.trustwave.com/Resources/Security-Advisories/Advisories/TWSL2015-009/?fid=6478
- https://www.trustwave.com/Resources/SpiderLabs-Blog/Attacking-Ruby-Gem-Security-with-CVE-2015-3900/
- http://blog.rubygems.org/2015/06/08/2.2.5-released.html
- http://blog.rubygems.org/2015/06/08/2.4.8-released.html
- http://www.oracle.com/technetwork/topics/security/bulletinoct2015-2511968.html
- http://www.securityfocus.com/bid/75431
- https://github.com/rubygems/rubygems/commit/5c7bfb5
- https://puppet.com/security/cve/CVE-2015-3900
- https://www.trustwave.com/Resources/Security-Advisories/Advisories/TWSL2015-009/?fid=6478
- https://www.trustwave.com/Resources/SpiderLabs-Blog/Attacking-Ruby-Gem-Security-with-CVE-2015-3900/
Raw JSON (NVD)
Show
{
"id": "CVE-2015-4020",
"cveTags": [],
"metrics": {
"cvssMetricV2": [
{
"type": "Primary",
"source": "nvd@nist.gov",
"cvssData": {
"version": "2.0",
"baseScore": 4.3,
"accessVector": "NETWORK",
"vectorString": "AV:N/AC:M/Au:N/C:N/I:P/A:N",
"authentication": "NONE",
"integrityImpact": "PARTIAL",
"accessComplexity": "MEDIUM",
"availabilityImpact": "NONE",
"confidentialityImpact": "NONE"
},
"acInsufInfo": false,
"impactScore": 2.9,
"baseSeverity": "MEDIUM",
"obtainAllPrivilege": false,
"exploitabilityScore": 8.6,
"obtainUserPrivilege": false,
"obtainOtherPrivilege": false,
"userInteractionRequired": false
}
]
},
"affected": [
{
"source": "cve@mitre.org",
"affectedData": [
{
"vendor": "n/a",
"product": "n/a",
"versions": [
{
"status": "affected",
"version": "n/a"
}
]
}
]
}
],
"published": "2015-08-25T17:59:01.760",
"references": [
{
"url": "http://blog.rubygems.org/2015/06/08/2.2.5-released.html",
"tags": [
"Vendor Advisory"
],
"source": "cve@mitre.org"
},
{
"url": "http://blog.rubygems.org/2015/06/08/2.4.8-released.html",
"tags": [
"Vendor Advisory"
],
"source": "cve@mitre.org"
},
{
"url": "http://www.oracle.com/technetwork/topics/security/bulletinoct2015-2511968.html",
"tags": [
"Third Party Advisory"
],
"source": "cve@mitre.org"
},
{
"url": "http://www.securityfocus.com/bid/75431",
"source": "cve@mitre.org"
},
{
"url": "https://github.com/rubygems/rubygems/commit/5c7bfb5",
"source": "cve@mitre.org"
},
{
"url": "https://puppet.com/security/cve/CVE-2015-3900",
"source": "cve@mitre.org"
},
{
"url": "https://www.trustwave.com/Resources/Security-Advisories/Advisories/TWSL2015-009/?fid=6478",
"tags": [
"Third Party Advisory"
],
"source": "cve@mitre.org"
},
{
"url": "https://www.trustwave.com/Resources/SpiderLabs-Blog/Attacking-Ruby-Gem-Security-with-CVE-2015-3900/",
"tags": [
"Third Party Advisory"
],
"source": "cve@mitre.org"
},
{
"url": "http://blog.rubygems.org/2015/06/08/2.2.5-released.html",
"tags": [
"Vendor Advisory"
],
"source": "af854a3a-2127-422b-91ae-364da2661108"
},
{
"url": "http://blog.rubygems.org/2015/06/08/2.4.8-released.html",
"tags": [
"Vendor Advisory"
],
"source": "af854a3a-2127-422b-91ae-364da2661108"
},
{
"url": "http://www.oracle.com/technetwork/topics/security/bulletinoct2015-2511968.html",
"tags": [
"Third Party Advisory"
],
"source": "af854a3a-2127-422b-91ae-364da2661108"
},
{
"url": "http://www.securityfocus.com/bid/75431",
"source": "af854a3a-2127-422b-91ae-364da2661108"
},
{
"url": "https://github.com/rubygems/rubygems/commit/5c7bfb5",
"source": "af854a3a-2127-422b-91ae-364da2661108"
},
{
"url": "https://puppet.com/security/cve/CVE-2015-3900",
"source": "af854a3a-2127-422b-91ae-364da2661108"
},
{
"url": "https://www.trustwave.com/Resources/Security-Advisories/Advisories/TWSL2015-009/?fid=6478",
"tags": [
"Third Party Advisory"
],
"source": "af854a3a-2127-422b-91ae-364da2661108"
},
{
"url": "https://www.trustwave.com/Resources/SpiderLabs-Blog/Attacking-Ruby-Gem-Security-with-CVE-2015-3900/",
"tags": [
"Third Party Advisory"
],
"source": "af854a3a-2127-422b-91ae-364da2661108"
}
],
"vulnStatus": "Modified",
"weaknesses": [
{
"type": "Primary",
"source": "nvd@nist.gov",
"description": [
{
"lang": "en",
"value": "CWE-20"
}
]
}
],
"descriptions": [
{
"lang": "en",
"value": "RubyGems 2.0.x before 2.0.17, 2.2.x before 2.2.5, and 2.4.x before 2.4.8 does not validate the hostname when fetching gems or making API requests, which allows remote attackers to redirect requests to arbitrary domains via a crafted DNS SRV record with a domain that is suffixed with the original domain name, aka a \"DNS hijack attack.\" NOTE: this vulnerability exists because to an incomplete fix for CVE-2015-3900."
},
{
"lang": "es",
"value": "RubyGems 2.0.x en versiones anteriores a 2.0.17, 2.2.x en versiones anteriores a 2.2.5 y 2.4.x en versiones anteriores a 2.4.8 no valida el nombre del host cuando recupera gemas o hace peticiones API, lo que permite a atacantes remotos redirigir peticiones a dominios arbitrarios mediante un registro DNS SRV con un dominio que está seguido del nombre del dominio original, también conocido como un \"atacque de secuestro DNS\". NOTA: esta vulnerabilidad existe debido a una solución incompleta para CVE-2015-3900."
}
],
"lastModified": "2026-06-17T00:26:38.357",
"configurations": [
{
"nodes": [
{
"negate": false,
"cpeMatch": [
{
"criteria": "cpe:2.3:o:oracle:solaris:11.3:*:*:*:*:*:*:*",
"vulnerable": true,
"matchCriteriaId": "79A602C5-61FE-47BA-9786-F045B6C6DBA8"
}
],
"operator": "OR"
}
]
},
{
"nodes": [
{
"negate": false,
"cpeMatch": [
{
"criteria": "cpe:2.3:a:rubygems:rubygems:2.0.0:*:*:*:*:*:*:*",
"vulnerable": true,
"matchCriteriaId": "F2D82506-3FB5-41BA-8704-CC324C0B0DB2"
},
{
"criteria": "cpe:2.3:a:rubygems:rubygems:2.0.0:preview2:*:*:*:*:*:*",
"vulnerable": true,
"matchCriteriaId": "28EF4773-AA97-4209-951F-942286A92413"
},
{
"criteria": "cpe:2.3:a:rubygems:rubygems:2.0.0:preview2.1:*:*:*:*:*:*",
"vulnerable": true,
"matchCriteriaId": "2A3D3005-679A-4761-AC38-CAE1C1CB20AC"
},
{
"criteria": "cpe:2.3:a:rubygems:rubygems:2.0.0:preview2.2:*:*:*:*:*:*",
"vulnerable": true,
"matchCriteriaId": "344FF6A4-8041-4652-A0EA-F18BB0FCFB26"
},
{
"criteria": "cpe:2.3:a:rubygems:rubygems:2.0.0:rc1:*:*:*:*:*:*",
"vulnerable": true,
"matchCriteriaId": "E6CC620F-8E83-4256-9872-CCCDF5A4ED35"
},
{
"criteria": "cpe:2.3:a:rubygems:rubygems:2.0.0:rc2:*:*:*:*:*:*",
"vulnerable": true,
"matchCriteriaId": "F22B79F6-5CA1-4E5C-9223-345A39EDD507"
},
{
"criteria": "cpe:2.3:a:rubygems:rubygems:2.0.1:*:*:*:*:*:*:*",
"vulnerable": true,
"matchCriteriaId": "260A155C-ED09-44E7-8279-5B94A4AC8CA4"
},
{
"criteria": "cpe:2.3:a:rubygems:rubygems:2.0.2:*:*:*:*:*:*:*",
"vulnerable": true,
"matchCriteriaId": "C4E0506F-F2E6-45A2-B637-576C341A71B7"
},
{
"criteria": "cpe:2.3:a:rubygems:rubygems:2.0.3:*:*:*:*:*:*:*",
"vulnerable": true,
"matchCriteriaId": "C2EC4513-B653-438A-A1E4-406D055FC160"
},
{
"criteria": "cpe:2.3:a:rubygems:rubygems:2.0.4:*:*:*:*:*:*:*",
"vulnerable": true,
"matchCriteriaId": "F5FDF363-24FA-45D2-879B-B1CF9B667AE2"
},
{
"criteria": "cpe:2.3:a:rubygems:rubygems:2.0.5:*:*:*:*:*:*:*",
"vulnerable": true,
"matchCriteriaId": "03A81F55-2B6B-467C-9281-AA11ED31220F"
},
{
"criteria": "cpe:2.3:a:rubygems:rubygems:2.0.6:*:*:*:*:*:*:*",
"vulnerable": true,
"matchCriteriaId": "A8143D88-890D-4C87-9120-46B33D7D63C8"
},
{
"criteria": "cpe:2.3:a:rubygems:rubygems:2.0.7:*:*:*:*:*:*:*",
"vulnerable": true,
"matchCriteriaId": "3E5608F5-AC8A-4368-9323-A2CC09F18AAD"
},
{
"criteria": "cpe:2.3:a:rubygems:rubygems:2.0.8:*:*:*:*:*:*:*",
"vulnerable": true,
"matchCriteriaId": "0ACEEB4D-D21D-4D89-881A-9FC33121F69C"
},
{
"criteria": "cpe:2.3:a:rubygems:rubygems:2.0.9:*:*:*:*:*:*:*",
"vulnerable": true,
"matchCriteriaId": "BE3D1495-E577-492F-ADE1-B8E8FB7F241A"
},
{
"criteria": "cpe:2.3:a:rubygems:rubygems:2.0.10:*:*:*:*:*:*:*",
"vulnerable": true,
"matchCriteriaId": "BCD623FF-E72B-4C63-B9E6-AFCDEFDD760A"
},
{
"criteria": "cpe:2.3:a:rubygems:rubygems:2.0.11:*:*:*:*:*:*:*",
"vulnerable": true,
"matchCriteriaId": "EAA1E4C2-29CA-48C2-AFFA-5357B36655FB"
},
{
"criteria": "cpe:2.3:a:rubygems:rubygems:2.0.12:*:*:*:*:*:*:*",
"vulnerable": true,
"matchCriteriaId": "EB358B7A-D258-4B86-BBD9-09388109653A"
},
{
"criteria": "cpe:2.3:a:rubygems:rubygems:2.0.13:*:*:*:*:*:*:*",
"vulnerable": true,
"matchCriteriaId": "5C608597-03F7-4F01-803F-0E2B1E9E1D30"
},
{
"criteria": "cpe:2.3:a:rubygems:rubygems:2.0.14:*:*:*:*:*:*:*",
"vulnerable": true,
"matchCriteriaId": "67C95ABA-1949-4B56-B9E3-44B4AF90274D"
},
{
"criteria": "cpe:2.3:a:rubygems:rubygems:2.0.15:*:*:*:*:*:*:*",
"vulnerable": true,
"matchCriteriaId": "DD319AE0-3D8C-40DF-857D-C38EAFA88C68"
},
{
"criteria": "cpe:2.3:a:rubygems:rubygems:2.0.16:*:*:*:*:*:*:*",
"vulnerable": true,
"matchCriteriaId": "34709EF4-D695-4184-816A-F51FD9DF8AE6"
},
{
"criteria": "cpe:2.3:a:rubygems:rubygems:2.2.0:*:*:*:*:*:*:*",
"vulnerable": true,
"matchCriteriaId": "672CC7FA-188C-4F34-B10D-7E0C4E7857F4"
},
{
"criteria": "cpe:2.3:a:rubygems:rubygems:2.2.1:*:*:*:*:*:*:*",
"vulnerable": true,
"matchCriteriaId": "FFCFF897-E65B-4D58-BA4D-B08FEF1201B6"
},
{
"criteria": "cpe:2.3:a:rubygems:rubygems:2.2.2:*:*:*:*:*:*:*",
"vulnerable": true,
"matchCriteriaId": "1B6D0730-F774-4E29-9871-3FF4BA89981E"
},
{
"criteria": "cpe:2.3:a:rubygems:rubygems:2.2.3:*:*:*:*:*:*:*",
"vulnerable": true,
"matchCriteriaId": "2D692C10-A24E-48EA-887C-7333C772744C"
},
{
"criteria": "cpe:2.3:a:rubygems:rubygems:2.2.4:*:*:*:*:*:*:*",
"vulnerable": true,
"matchCriteriaId": "DCDB36D4-FB34-4FAB-8549-AF7D5244CCD4"
},
{
"criteria": "cpe:2.3:a:rubygems:rubygems:2.4.0:*:*:*:*:*:*:*",
"vulnerable": true,
"matchCriteriaId": "5AFD153C-B0C3-4A91-8B09-839341FA4434"
},
{
"criteria": "cpe:2.3:a:rubygems:rubygems:2.4.1:*:*:*:*:*:*:*",
"vulnerable": true,
"matchCriteriaId": "04D0BF47-C818-4834-BFA2-23DD25386CCC"
},
{
"criteria": "cpe:2.3:a:rubygems:rubygems:2.4.2:*:*:*:*:*:*:*",
"vulnerable": true,
"matchCriteriaId": "7F54C49A-12CE-4AC5-A94A-9C5921414AC6"
},
{
"criteria": "cpe:2.3:a:rubygems:rubygems:2.4.3:*:*:*:*:*:*:*",
"vulnerable": true,
"matchCriteriaId": "9CFF3F39-EF40-4D73-965F-98A51C39C02F"
},
{
"criteria": "cpe:2.3:a:rubygems:rubygems:2.4.4:*:*:*:*:*:*:*",
"vulnerable": true,
"matchCriteriaId": "35BCB8FC-EE9C-4AA4-A4A0-E20A3E557129"
},
{
"criteria": "cpe:2.3:a:rubygems:rubygems:2.4.5:*:*:*:*:*:*:*",
"vulnerable": true,
"matchCriteriaId": "A5B90365-2172-43E3-870B-A16F9FB45FD8"
},
{
"criteria": "cpe:2.3:a:rubygems:rubygems:2.4.6:*:*:*:*:*:*:*",
"vulnerable": true,
"matchCriteriaId": "D4932202-9EEA-4B95-A24A-637678837179"
},
{
"criteria": "cpe:2.3:a:rubygems:rubygems:2.4.7:*:*:*:*:*:*:*",
"vulnerable": true,
"matchCriteriaId": "EE86B4DE-776B-460F-B5C3-02C691243820"
}
],
"operator": "OR"
}
]
}
],
"sourceIdentifier": "cve@mitre.org"
}