CVE-2026-31223
Full vulnerability record from the local CVENow database.
Description
The snorkel library thru v0.10.0 contains a critical insecure deserialization vulnerability (CWE-502) in the BaseLabeler.load() method of the BaseLabeler class. The method loads serialized labeler models using the unsafe pickle.load() function on user-supplied file paths without any validation or security controls. Python's pickle module is inherently dangerous for deserializing untrusted data, as it can execute arbitrary code during the deserialization process. A remote attacker can exploit this by providing a maliciously crafted pickle file, leading to arbitrary code execution on the victim's system when the file is loaded via the vulnerable method.
Severity
HIGH
CVSS score
8.8
(v3.1)
Vulnerability status
Modified
Source identifier
Published
2026-05-12 16:16:14.223000
Last modified
2026-10-19 22:10:00.130000
View original CVE JSON
{
"id": "CVE-2026-31223",
"sourceIdentifier": "[email protected]",
"published": "2026-05-12T16:16:14.223",
"lastModified": "2026-10-19T22:10:00.130",
"vulnStatus": "Modified",
"cveTags": [],
"descriptions": [
{
"lang": "en",
"value": "The snorkel library thru v0.10.0 contains a critical insecure deserialization vulnerability (CWE-502) in the BaseLabeler.load() method of the BaseLabeler class. The method loads serialized labeler models using the unsafe pickle.load() function on user-supplied file paths without any validation or security controls. Python's pickle module is inherently dangerous for deserializing untrusted data, as it can execute arbitrary code during the deserialization process. A remote attacker can exploit this by providing a maliciously crafted pickle file, leading to arbitrary code execution on the victim's system when the file is loaded via the vulnerable method."
},
{
"lang": "es",
"value": "La biblioteca snorkel hasta la v0.10.0 contiene una vulnerabilidad crítica de deserialización insegura (CWE-502) en el método BaseLabeler.load() de la clase BaseLabeler. El método carga modelos de etiquetador serializados utilizando la función insegura pickle.load() en rutas de archivo proporcionadas por el usuario sin ninguna validación o controles de seguridad. El módulo pickle de Python es inherentemente peligroso para deserializar datos no confiables, ya que puede ejecutar código arbitrario durante el proceso de deserialización. Un atacante remoto puede explotar esto al proporcionar un archivo pickle creado maliciosamente, lo que lleva a la ejecución de código arbitrario en el sistema de la víctima cuando el archivo se carga a través del método vulnerable."
}
],
"affected": [
{
"source": "[email protected]",
"affectedData": [
{
"vendor": "n/a",
"product": "n/a",
"versions": [
{
"version": "n/a",
"status": "affected"
}
]
}
]
}
],
"metrics": {
"cvssMetricV31": [
{
"source": "[email protected]",
"type": "Primary",
"cvssData": {
"version": "3.1",
"vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H",
"baseScore": 8.8,
"baseSeverity": "HIGH",
"attackVector": "NETWORK",
"attackComplexity": "LOW",
"privilegesRequired": "NONE",
"userInteraction": "REQUIRED",
"scope": "UNCHANGED",
"confidentialityImpact": "HIGH",
"integrityImpact": "HIGH",
"availabilityImpact": "HIGH"
},
"exploitabilityScore": 2.8,
"impactScore": 5.9
},
{
"source": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
"type": "Secondary",
"cvssData": {
"version": "3.1",
"vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H",
"baseScore": 8.8,
"baseSeverity": "HIGH",
"attackVector": "NETWORK",
"attackComplexity": "LOW",
"privilegesRequired": "NONE",
"userInteraction": "REQUIRED",
"scope": "UNCHANGED",
"confidentialityImpact": "HIGH",
"integrityImpact": "HIGH",
"availabilityImpact": "HIGH"
},
"exploitabilityScore": 2.8,
"impactScore": 5.9
}
],
"ssvcV203": [
{
"source": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
"ssvcData": {
"timestamp": "2026-05-15T17:23:19.571413Z",
"id": "CVE-2026-31223",
"options": [
{
"exploitation": "none"
},
{
"automatable": "no"
},
{
"technicalImpact": "total"
}
],
"role": "CISA Coordinator",
"version": "2.0.3"
}
}
]
},
"weaknesses": [
{
"source": "[email protected]",
"type": "Primary",
"description": [
{
"lang": "en",
"value": "CWE-502"
}
]
},
{
"source": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
"type": "Secondary",
"description": [
{
"lang": "en",
"value": "CWE-502"
}
]
}
],
"configurations": [
{
"nodes": [
{
"operator": "OR",
"negate": false,
"cpeMatch": [
{
"vulnerable": true,
"criteria": "cpe:2.3:a:snorkel:snorkel:*:*:*:*:*:*:*:*",
"versionEndIncluding": "0.10.0",
"matchCriteriaId": "F2E7FC3A-64C0-4F69-84DD-FC9BA0883D08"
}
]
}
]
}
],
"references": [
{
"url": "https://github.com/snorkel-team/snorkel",
"source": "[email protected]",
"tags": [
"Product"
]
},
{
"url": "https://www.notion.so/CVE-2026-31223-35d1e1393188811ab1d0e4a8a2e67992",
"source": "[email protected]",
"tags": [
"Third Party Advisory"
]
}
]
}