Security advisory
Nokogiri is a Rubygem providing HTML, XML, SAX, and Reader parsers with XPath and CSS selector support. In Nokogiri before version 1.11.0.rc4 there is an XXE vulnerability. XML Schemas parsed by Nokogiri::XML::Schema are trusted by default, allowing external resources to be accessed over the network, potentially enabling XXE or SSRF attacks. This behavior is counter to the security policy followed by Nokogiri maintainers, which is to treat all input as untrusted by default whenever possible. This is fixed in Nokogiri version 1.11.0.rc4.
- Products
- Not specified
- Affected versions
- Not specified
- Fixed versions
- Not specified
- CVEs
- CVE-2020-26247
- Confirmed fixed CVEs
- Not specified
- Updated in this feed
- 31 Oct 2026, 12:36 UTC · Revision 1
Source evidence
Nokogiri is a Rubygem providing HTML, XML, SAX, and Reader parsers with XPath and CSS selector support. In Nokogiri before version 1.11.0.rc4 there is an XXE vulnerability. XML Schemas parsed by Nokogiri::XML::Schema are trusted by default, allowing external resources to be accessed over the network, potentially enabling XXE or SSRF attacks. This behavior is counter to the security policy followed by Nokogiri maintainers, which is to treat all input as untrusted by default whenever possible. This is fixed in Nokogiri version 1.11.0.rc4.
osv:CVE-2020-26247
Complete source record
{
"id": "16ef269e4fad65293dabb8f31eab66d5cbdf65673fe977c99da6006b6d95beb4",
"url": "https://osv.dev/vulnerability/CVE-2020-26247",
"method": "structured",
"payload": {
"kind": "advisory",
"title": "CVE-2020-26247",
"summary": "Nokogiri is a Rubygem providing HTML, XML, SAX, and Reader parsers with XPath and CSS selector support. In Nokogiri before version 1.11.0.rc4 there is an XXE vulnerability. XML Schemas parsed by Nokogiri::XML::Schema are trusted by default, allowing external resources to be accessed over the network, potentially enabling XXE or SSRF attacks. This behavior is counter to the security policy followed by Nokogiri maintainers, which is to treat all input as untrusted by default whenever possible. This is fixed in Nokogiri version 1.11.0.rc4.",
"evidence": "osv:CVE-2020-26247",
"products": [],
"severity": "medium",
"structured": {
"id": "CVE-2020-26247",
"aliases": [
"CVE-2020-26247",
"GHSA-vr8q-g5c7-m54m"
],
"metrics": [
{
"type": "CVSS_V3",
"score": "CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:N/A:N"
}
],
"affected": [
{
"ranges": [
{
"repo": "https://github.com/sparklemotion/nokogiri",
"type": "GIT",
"events": [
{
"introduced": "0"
},
{
"fixed": "1c1fba5e34bf620d83e96fb9dcbd7393c05a03e5"
},
{
"introduced": "8ce75d120acfe6a04d3e2c158d48050286ad3816"
},
{
"last_affected": "959db1d8a6d6afaaa5e2cef554492e367f1791ff"
},
{
"fixed": "9c87439d9afa14a365ff13e73adc809cb2c3d97b"
},
{
"fixed": "f7bc31f8c246c3d6db1cd2b7feee2041630b0778"
}
],
"database_specific": {
"extracted_events": [
{
"cpe": "cpe:2.3:a:nokogiri:nokogiri:*:*:*:*:*:ruby:*:*",
"range": [
{
"introduced": "0"
},
{
"fixed": "1.11.0"
}
],
"source": "CPE_RANGE"
},
{
"cpe": "cpe:2.3:a:nokogiri:nokogiri:1.11.0:rc1:*:*:*:ruby:*:*",
"range": [
{
"introduced": "1.11.0-rc1"
},
{
"last_affected": "1.11.0-rc1"
}
],
"source": "CPE_STRING"
},
{
"cpe": "cpe:2.3:a:nokogiri:nokogiri:1.11.0:rc2:*:*:*:ruby:*:*",
"range": [
{
"introduced": "1.11.0-rc2"
},
{
"last_affected": "1.11.0-rc2"
}
],
"source": "CPE_STRING"
},
{
"cpe": "cpe:2.3:a:nokogiri:nokogiri:1.11.0:rc3:*:*:*:ruby:*:*",
"range": [
{
"introduced": "1.11.0-rc3"
},
{
"last_affected": "1.11.0-rc3"
}
],
"source": "CPE_STRING"
},
{
"range": [
{
"fixed": "9c87439d9afa14a365ff13e73adc809cb2c3d97b"
}
],
"source": "REFERENCES_COMMIT"
},
{
"range": [
{
"fixed": "f7bc31f8c246c3d6db1cd2b7feee2041630b0778"
}
],
"source": "REFERENCES_TAG",
"original_tag": "v1.11.0.rc4"
}
]
}
}
],
"versions": [
"1.11.0-rc1",
"1.11.0-rc2",
"1.11.0-rc3",
"v1.11.0.rc3",
"v1.11.0.rc2",
"v1.11.0.rc1"
],
"database_specific": {
"source": "https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2020-26247.json",
"vanir_signatures": [
{
"id": "CVE-2020-26247-1086b743",
"digest": {
"threshold": 0.9,
"line_hashes": [
"16129296325024307753584729971216115171",
"195253977861445400880545819685849286995",
"234641203445567770710194267598556873510",
"93454226303575813895728979775204002184",
"320623070487055999221258629894772676744",
"219862703534989535185923216080360078435",
"112080578547013292196838592699458036397",
"25210919650267855240289481430267046667",
"311574204152573001090045375559569945245",
"129718661893605621251598893703741626467",
"212510173097211613924033432339443995466",
"22243939135539515148190768719738278106",
"330253986602462041404647576948553452485",
"285842214180739133696563041886643213351",
"251656747183935732469118221853540056837",
"327715987815117534958186218152502493812",
"230615113216499342109539943877644549766",
"141419580842762453443895337928153792707",
"310741295053459094876716208902256531165",
"84315579863441221986993447331642079835",
"19656201694574745185137580246445889980",
"121698540467984208428625608629657429079",
"205510213628273060472187358186122845099",
"4572574395694206270477621884668240651",
"161237322459015512531557456285040964274",
"10877439329876273809149158542073357952",
"327875998995604504209160989012627692240",
"330253986602462041404647576948553452485",
"285842214180739133696563041886643213351",
"251656747183935732469118221853540056837",
"4397904576664470264547697413284932086",
"179077504760930219978786834013719739900",
"98123204464514570210478394303085182658",
"301682279023959772635377483388779805325",
"84142686720252447221210329669783966386"
]
},
"source": "https://github.com/sparklemotion/nokogiri/commit/9c87439d9afa14a365ff13e73adc809cb2c3d97b",
"target": {
"file": "ext/nokogiri/xml_relax_ng.c"
},
"deprecated": false,
"signature_type": "Line",
"signature_version": "v1"
},
{
"id": "CVE-2020-26247-2914ce50",
"digest": {
"length": 369,
"function_hash": "219890053045773288413438907544483592904"
},
"source": "https://github.com/sparklemotion/nokogiri/commit/9c87439d9afa14a365ff13e73adc809cb2c3d97b",
"target": {
"file": "ext/java/nokogiri/XmlSchema.java",
"function": "getSchema"
},
"deprecated": false,
"signature_type": "Function",
"signature_version": "v1"
},
{
"id": "CVE-2020-26247-2a7b9317",
"digest": {
"threshold": 0.9,
"line_hashes": [
"284109293209010179600288157504224704753",
"317534956635952457798072278053107250659",
"183140225820409356715355793987278274563",
"47332260591008491147365715575388541965",
"236964573616533475382333565210974418422",
"93496642269226571639003635625893026788",
"27038234486702696420691399556436137365",
"230655219684642834238569368740461148646",
"203681836539033221932035891023540784745",
"297503036295038120245384402482044110075",
"298576485561926522671672553121283502442"
]
},
"source": "https://github.com/sparklemotion/nokogiri/commit/9c87439d9afa14a365ff13e73adc809cb2c3d97b",
"target": {
"file": "ext/java/nokogiri/XmlRelaxng.java"
},
"deprecated": false,
"signature_type": "Line",
"signature_version": "v1"
},
{
"id": "CVE-2020-26247-4952ba37",
"digest": {
"length": 720,
"function_hash": "9661515642441603369072603515252723382"
},
"source": "https://github.com/sparklemotion/nokogiri/commit/9c87439d9afa14a365ff13e73adc809cb2c3d97b",
"target": {
"file": "ext/nokogiri/xml_schema.c",
"function": "read_memory"
},
"deprecated": false,
"signature_type": "Function",
"signature_version": "v1"
},
{
"id": "CVE-2020-26247-a4f0f1ad",
"digest": {
"length": 906,
"function_hash": "39153933559615413504428734559142695356"
},
"source": "https://github.com/sparklemotion/nokogiri/commit/9c87439d9afa14a365ff13e73adc809cb2c3d97b",
"target": {
"file": "ext/nokogiri/xml_schema.c",
"function": "from_document"
},
"deprecated": false,
"signature_type": "Function",
"signature_version": "v1"
},
{
"id": "CVE-2020-26247-a7029d53",
"digest": {
"length": 736,
"function_hash": "333683911630746199756708849538491302527"
},
"source": "https://github.com/sparklemotion/nokogiri/commit/9c87439d9afa14a365ff13e73adc809cb2c3d97b",
"target": {
"file": "ext/nokogiri/xml_relax_ng.c",
"function": "from_document"
},
"deprecated": false,
"signature_type": "Function",
"signature_version": "v1"
},
{
"id": "CVE-2020-26247-aacd9cb6",
"digest": {
"threshold": 0.9,
"line_hashes": [
"18368975417469464455862565725833633117",
"309767481340271058151290069613147460671",
"98745279010625720811482770789622897719",
"299162640867332122330361054992335114660",
"107905164198225427569024808058081181826",
"106662402031143017515461938960561067732",
"300434304369549138135673206475278804091",
"86427542845665156800975900431641495384",
"228149875155748926044860815901149901763",
"316611442836047098391368969960763510046",
"102311322235016132575625285576627684409",
"33543768097933111516812503182188757947",
"34466835567363195094654007736164913647",
"95578736202121547381226148454273687455",
"311264631618587098963782203185141521443",
"138592689909582525329315992232035465568",
"247267543660418154986770796049467716218",
"26978704467550789828283771393368008629",
"76908921169803025605259058453933354805",
"309680079967299686170303324588732199031",
"322280999268818191130779300657341305389",
"140940071266160965160149902758419816573",
"32519633659955138974605276992658685340",
"146626668676877096900399530126063968617",
"224095978744665830001040308389523812276",
"304707949602963848370757399268143938025",
"267143547219070203930725164196472070220",
"72778127015119500542079173824787824003",
"320121378405579455791777477251477905312",
"239649512450106049275777683895821171879",
"153922857170803326464756578414932747019"
]
},
"source": "https://github.com/sparklemotion/nokogiri/commit/9c87439d9afa14a365ff13e73adc809cb2c3d97b",
"target": {
"file": "ext/java/nokogiri/XmlSchema.java"
},
"deprecated": false,
"signature_type": "Line",
"signature_version": "v1"
},
{
"id": "CVE-2020-26247-b7a35816",
"digest": {
"length": 721,
"function_hash": "117965742480207517228833462108399685431"
},
"source": "https://github.com/sparklemotion/nokogiri/commit/9c87439d9afa14a365ff13e73adc809cb2c3d97b",
"target": {
"file": "ext/nokogiri/xml_relax_ng.c",
"function": "read_memory"
},
"deprecated": false,
"signature_type": "Function",
"signature_version": "v1"
},
{
"id": "CVE-2020-26247-bd9c9e93",
"digest": {
"length": 649,
"function_hash": "223075275764046106416786741881055081456"
},
"source": "https://github.com/sparklemotion/nokogiri/commit/9c87439d9afa14a365ff13e73adc809cb2c3d97b",
"target": {
"file": "ext/java/nokogiri/XmlSchema.java",
"function": "createSchemaInstance"
},
"deprecated": false,
"signature_type": "Function",
"signature_version": "v1"
},
{
"id": "CVE-2020-26247-bf1a9ac9",
"digest": {
"length": 413,
"function_hash": "55369905720923703898960383428349986875"
},
"source": "https://github.com/sparklemotion/nokogiri/commit/9c87439d9afa14a365ff13e73adc809cb2c3d97b",
"target": {
"file": "ext/nokogiri/xml_schema.c",
"function": "init_xml_schema"
},
"deprecated": false,
"signature_type": "Function",
"signature_version": "v1"
},
{
"id": "CVE-2020-26247-d43b961b",
"digest": {
"length": 503,
"function_hash": "5786619012056855424931940457734128357"
},
"source": "https://github.com/sparklemotion/nokogiri/commit/9c87439d9afa14a365ff13e73adc809cb2c3d97b",
"target": {
"file": "ext/java/nokogiri/XmlSchema.java",
"function": "from_document"
},
"deprecated": false,
"signature_type": "Function",
"signature_version": "v1"
},
{
"id": "CVE-2020-26247-da6b2d19",
"digest": {
"length": 366,
"function_hash": "178420493317479619596962782960376001712"
},
"source": "https://github.com/sparklemotion/nokogiri/commit/9c87439d9afa14a365ff13e73adc809cb2c3d97b",
"target": {
"file": "ext/nokogiri/xml_relax_ng.c",
"function": "init_xml_relax_ng"
},
"deprecated": false,
"signature_type": "Function",
"signature_version": "v1"
},
{
"id": "CVE-2020-26247-dc31f83e",
"digest": {
"length": 198,
"function_hash": "70547010719699758318416237910510805399"
},
"source": "https://github.com/sparklemotion/nokogiri/commit/9c87439d9afa14a365ff13e73adc809cb2c3d97b",
"target": {
"file": "ext/java/nokogiri/XmlSchema.java",
"function": "read_memory"
},
"deprecated": false,
"signature_type": "Function",
"signature_version": "v1"
},
{
"id": "CVE-2020-26247-e2c7b7dd",
"digest": {
"threshold": 0.9,
"line_hashes": [
"245036895791005918807540661154801744961",
"195253977861445400880545819685849286995",
"118691521782342627629919004264250277183",
"77836772905366762065593603267093444043",
"39684999300440156384979930077330717470",
"31433595251204166851639508193626122711",
"273424029110672348211045194946226707125",
"132995128983553400275729179270523361827",
"317403214207430172431851066618457880526",
"117833701499500858658336364681936419433",
"18577471886351549381254556569181691104",
"322851332635404903317113186642557374902",
"292013088696730575603747281532282359517",
"196732966080469569938486972139353088925",
"20582180580341939167055705876350667248",
"234165010474578995123160478493978904626",
"330253986602462041404647576948553452485",
"285842214180739133696563041886643213351",
"251656747183935732469118221853540056837",
"217621481900430820559730602175616889241",
"257190738122731512697296301533733939029",
"320026612391941053349667203696799852482",
"141419580842762453443895337928153792707",
"278535449158355236089308499027972708573",
"333035305826783399465818915243033941738",
"117697633259868205941634674907483038761",
"137042107976109139833035234253767044701",
"323200872687005788464717158440586828895",
"4572574395694206270477621884668240651",
"225481876307343704326901068217414566347",
"86635287901658810046397424354547918902",
"79281886800332977751996000076586877399",
"330253986602462041404647576948553452485",
"285842214180739133696563041886643213351",
"253333691218305700242059713895777393061",
"34277546824259342123382005994815457060",
"263240520538459396582460579562518667845",
"88747279844484007946530569957151229857",
"263228372222442742144199980814215902355",
"211316759360533367954227915687484315990",
"183556972803462742405142005098529480797"
]
},
"source": "https://github.com/sparklemotion/nokogiri/commit/9c87439d9afa14a365ff13e73adc809cb2c3d97b",
"target": {
"file": "ext/nokogiri/xml_schema.c"
},
"deprecated": false,
"signature_type": "Line",
"signature_version": "v1"
},
{
"id": "CVE-2020-26247-e2d1577f",
"digest": {
"length": 489,
"function_hash": "245022092763465965443630047219394908629"
},
"source": "https://github.com/sparklemotion/nokogiri/commit/9c87439d9afa14a365ff13e73adc809cb2c3d97b",
"target": {
"file": "ext/java/nokogiri/XmlRelaxng.java",
"function": "createSchemaInstance"
},
"deprecated": false,
"signature_type": "Function",
"signature_version": "v1"
}
],
"vanir_signatures_modified": "2026-10-20T13:59:21Z"
}
}
],
"modified": "2026-10-20T13:59:21.027007359Z",
"provider": "osv",
"references": [
"https://github.com/sparklemotion/nokogiri/releases/tag/v1.11.0.rc4",
"https://github.com/sparklemotion/nokogiri/security/advisories/GHSA-vr8q-g5c7-m54m",
"https://lists.debian.org/debian-lts-announce/2021/06/msg00007.html",
"https://lists.debian.org/debian-lts-announce/2022/10/msg00018.html",
"https://rubygems.org/gems/nokogiri",
"https://security.gentoo.org/glsa/202208-29",
"https://hackerone.com/reports/747489",
"https://github.com/sparklemotion/nokogiri/commit/9c87439d9afa14a365ff13e73adc809cb2c3d97b"
],
"provider_metadata": {
"unresolved_ranges": [
{
"cpes": [
"cpe:2.3:o:debian:debian_linux:10.0:*:*:*:*:*:*:*",
"cpe:2.3:o:debian:debian_linux:9.0:*:*:*:*:*:*:*"
],
"vendor_product": "debian:debian_linux",
"extracted_events": [
{
"range": [
{
"introduced": "9.0"
},
{
"last_affected": "9.0"
},
{
"introduced": "10.0"
},
{
"last_affected": "10.0"
}
],
"source": "CPE_STRING"
}
]
}
]
}
},
"related_cves": [
{
"value": "CVE-2020-26247",
"evidence": "/id"
}
],
"security_relevant": true,
"severity_evidence": "/severity/0/score"
},
"source_id": "core-osv",
"document_id": 388476,
"published_at": "2020-12-30T19:15:12.92+00:00"
}