Skip to main content
CSAF
Dashboard
CSAF
Import
Export
Settings
Theme
Theme
System
Light
Dark
Apply
Language
English
Deutsch
Français
Español
Italiano
Shqip
Հայերեն
Azərbaycanca
Беларуская
Bosanski
Български
Català
中文
Hrvatski
Čeština
Dansk
Nederlands
Eesti
Suomi
ქართული
Ελληνικά
हिन्दी
Magyar
Íslenska
Gaeilge
Latina
Latviešu
Lietuvių
Julevsámegiella
Lëtzebuergesch
Македонски
Malti
Crnogorski
Davvisámegiella
Norsk bokmål
Norsk nynorsk
Polski
Português
Română
Rumantsch
Русский
Српски
Slovenčina
Slovenščina
Åarjelsaemien gïele
Svenska
Türkçe
Українська
اردو
Info
About
License
System Info
Privacy
Security
Changelog
README
Administrator Guide
User Guide
Edit ndaal-sa-2026-047
Document Metadata
Tracking ID *
Title *
Category *
Security Advisory
VEX
Informational Advisory
Status *
draft
interim
final
Document Version *
TLP 2.0 *
TLP:CLEAR
TLP:GREEN
TLP:AMBER
TLP:AMBER+STRICT
TLP:RED
Verschlusssache
VS-NfD (VS-NUR FÜR DEN DIENSTGEBRAUCH)
VS-Vertr. (VS-VERTRAULICH)
Geh. (GEHEIM)
Str. Geh. (STRENG GEHEIM)
NATO
NR (NATO RESTRICTED)
NC (NATO CONFIDENTIAL)
NS (NATO SECRET)
CTS (COSMIC TOP SECRET)
Initial Release Date *
Current Release Date *
Summary *
ndaal_public_csaf_crud (the `csaf-crud` web application and the `csaf-core` library it embeds) is affected by a path-traversal vulnerability (CWE-22) in the CSAF export path. The exported file location is derived from the imported document's `document.tracking.id` field, which is fully attacker-controllable: a CSAF document accepted on import carries a tracking ID that the exporter splits into a `{year}/{sequence}` directory pair and joins directly onto the configured export directory. Document validation only checks that the tracking ID is non-empty, and the `parse_tracking_id` helper only checks that the year is four numeric digits and that the sequence contains no extra `-` separator. It does NOT reject path separators or `..` segments in the sequence. A crafted tracking ID such as `ndaal-sa-2026-../../escaped` therefore survives both checks and resolves to a directory OUTSIDE the export root, allowing an operator who imports an attacker-supplied advisory and then exports it to write CSAF JSON (and its hash sidecars) to an arbitrary filesystem location reachable by the service account. Fixed in 0.3.3 by routing every externally-derived path through a new `csaf_core::path_security::safe_join` capability-style guard that rejects `..`, absolute paths, drive/UNC prefixes, and NUL bytes before any filesystem operation runs.
Publisher
Name *
Namespace *
Category *
vendor
discoverer
coordinator
user
translator
other
Contact details
Affected Product
Vendor *
Product Name *
Product ID *
Product Status *
known_affected
known_not_affected
fixed
under_investigation
Vulnerability
Required for Security Advisories, optional for Informational / VEX.
CVE ID
Vulnerability Title
Vulnerability Description
The CSAF exporter derives the on-disk location of an exported advisory from the imported document's `document.tracking.id`. `export_document` splits the tracking ID into a `{year}/{sequence}` pair via `parse_tracking_id` and joins both — plus the `{tracking_id}.json` filename — directly onto the configured export directory. Document validation only rejects an empty tracking ID, and `parse_tracking_id` only enforces a four-digit year and the absence of an extra `-` in the sequence. A tracking ID such as `ndaal-sa-2026-../../escaped` passes both checks and resolves to a directory above the export root, so `create_dir_all` and the atomic write place files outside the intended directory. With deeper `..` sequences the write reaches arbitrary locations writable by the service account.
CWE ID
CWE Name
CVSS v3.1
Base Score (0.0 – 10.0)
Severity
—
NONE
LOW
MEDIUM
HIGH
CRITICAL
CVSS v3.1 Vector
CVSS v4.0
Base Score (0.0 – 10.0)
Severity
—
NONE
LOW
MEDIUM
HIGH
CRITICAL
CVSS v4.0 Vector
Save Changes
Cancel
Are you sure?
Cancel
Confirm