Die PURL-Spezifikation, kurz für Package URL, ist ein offener Standard, der entwickelt wurde, um Softwarepakete über verschiedene Ökosysteme hinweg auf einzigartige und standardisierte Weise zu identifizieren. Sie wurde 2017 von Philippe Ombredanne ins Leben gerufen, einem engagierten Open-Source-Tool-Maintainer, der nach einer besseren Methode suchte, Softwarepakete eindeutig zu referenzieren und so ihre Nachvollziehbarkeit und Verwaltung zu erleichtern. Eine PURL ist eine speziell formatierte URL, die Informationen über ein Softwarepaket in einer einzigen Zeichenkette zusammenfasst. Dabei werden der Pakettyp, beispielsweise npm für Node.js-Pakete, Maven für Java, PyPI für Python oder NuGet für .
NET, der Name des Pakets, optional ein Namespace oder eine Gruppe, eine Versionsangabe sowie weitere optionale Qualifikatoren und ein Unterpfad kodiert. Die PURL dient somit als universeller Identifier, der es Entwicklern, Sicherheitsexperten und anderen Beteiligten erleichtert, Softwarekomponenten zu verfolgen, zu analysieren und zu teilen. Die Struktur einer PURL ähnelt der einer Web-URL und lässt sich allgemein in verschiedene Segmente gliedern. Das prägnante Schema beginnt stets mit dem fest definierten Präfix "pkg:". Darauf folgt der Pakettyp, dann optional der Namespace, anschließend der Paketname, der über ein „@“ mit der Versionsnummer verbunden sein kann.
Weitere zusätzliche Parameter wie Qualifikatoren, eingeleitet durch ein „?“, oder spezifische Unterpfade nach einem „#“ runden die Adresse ab. Jedes dieser Elemente trägt zur eindeutigen Identifikation des Pakets bei und spielt eine unterschiedliche Rolle je nach verwendetem Ökosystem. Auch wenn manche Felder optional erscheinen, sind insbesondere der Namespace und die Versionsangabe für eine präzise Identifizierung unerlässlich. Im Fall von Maven entspricht der Namespace etwa der groupId, etwa "org.apache.
logging.log4j", der Name dem artifactId wie "log4j-core" und die Version könnte "2.14.1" sein. Die PURL würde dann wie folgt aussehen: pkg:maven/org.
apache.logging.log4j/log4j-core@2.14.1.
Diese klare und standardisierte Benennung ermöglicht es Tools und Plattformen, die korrekten Artefakte schnell und zuverlässig zu finden. PURL deckt eine breite Palette von Programmiersprachen und Paketmanagementsystemen ab. Neben den bereits erwähnten npm, Maven und PyPI sind auch RubyGems (gem), Go-Module (golang), Rust-Crates (cargo), Docker-Container (docker) sowie Systempakete wie Debian-Pakete (deb) und RPM-Pakete (rpm) integriert. Selbst ein generischer Typ existiert für Spezialfälle oder proprietäre Komponenten, die nicht exakt einem bekannten Ökosystem zugeordnet werden können. Diese weite Abdeckung macht PURLs besonders vielseitig und nützlich für moderne Softwareentwicklungs- und Sicherheitsprozesse.
Ein besonders bedeutsames Anwendungsgebiet für PURLs ist das Software Bill of Materials (SBOM). Ein SBOM stellt eine Liste aller Softwarekomponenten dar, die in einem Produkt enthalten sind. Die eindeutige Identifizierung dieser Komponenten ist zentral für das Management von Software-Lieferketten, Sicherheitsbewertungen und Lizenzprüfungen. PURLs fungieren dabei als sogenannte Schlüssel, die es ermöglichen, jede einzelne Bibliothek oder Komponente eindeutig zu bestimmen. Die breit anerkannte NTIA-Richtlinie zu SBOM-Mindestanforderungen empfiehlt zwar PURLs nicht explizit, nennt sie aber als eine von mehreren praktikablen Optionen für die eindeutige Kennzeichnung von Softwarekomponenten.
In der Praxis hat sich gezeigt, dass PURLs aufgrund ihrer Präzision und Einfachheit gegenüber anderen Kennungen wie CPE wesentliche Vorteile bieten. Sie ermöglichen eine automatisierte und verlässliche Verknüpfung von Sicherheitslücken und Lizenzinformationen mit den jeweiligen Paketen. Darüber hinaus helfen PURLs dabei, lückenhafte oder fehlerhafte Daten in SBOMs zu ergänzen und zu verbessern. Beispielsweise können fehlende Lizenzinformationen durch das Nachschlagen via PURL schnell ergänzt werden. Das wirkt sich positiv auf die Einhaltung von Lizenzbestimmungen und die Sicherheitsbewertung aus.
Auch unterschiedliche SBOM-Formate wie CycloneDX und SPDX unterstützen PURLs in zunehmendem Maße, was den Datenaustausch und die Kompatibilität zwischen verschiedenen Tools und Systemen erleichtert. Ein Vergleich von PURL mit CPE (Common Platform Enumeration) offenbart die jeweiligen Stärken und Anwendungsgebiete beider Standards. Während CPE ein älteres, von NIST gepflegtes Format ist, das vor allem für kommerzielle Produkte und größere Softwarepakete entwickelt wurde, richtet sich PURL primär an Open-Source-Pakete und moderne Software-Ökosysteme. CPE-Namen weisen eine komplexe und standardisierte Form auf, die oft eine externe Referenz benötigt, um die richtigen Einträge zu finden. Dagegen sind PURLs einfacher zu nutzen und basieren direkt auf den bekannten Paketnamen und Versionen aus den jeweiligen Paketmanagern.
Zudem ist PURL besser geeignet, um die Vielzahl und Vielfalt der Open-Source-Bibliotheken abzubilden, die mittlerweile die Grundlage vieler Softwareprojekte bilden. Viele Sicherheitsdatenbanken, abgesehen vom NVD, setzen inzwischen bevorzugt auf PURLs oder verwandte Identifikatoren, da sie präziser und leichter automatisierbar sind. Allerdings fehlt PURL derzeit die umfassende Unterstützung für kommerzielle Softwareprodukte, was die Rolle von CPE weiterhin relevant hält und die Kombination beider Ansätze nahelegt. Die PURL-Spezifikation ist somit ein wichtiger Baustein für die moderne Softwareentwicklung, Sicherheitsüberwachung und das Management von Software-Lieferketten. Sie trägt erheblich dazu bei, Transparenz, Genauigkeit und Automatisierung in der Identifikation und Verwaltung von Softwarekomponenten zu fördern.
Unternehmen und Entwicklerteams, die ein bewusstes Software-Compliance- und Sicherheitsmanagement betreiben, profitieren von der Klarheit und Standardisierung, die PURLs bieten. Zusammenfassend lässt sich sagen, dass die zunehmende Verbreitung von PURLs in der Softwarewelt angesichts der immer komplexeren und vielfältigeren Softwarelandschaft unverzichtbar geworden ist. Sie harmonisieren die unterschiedlichen Ökosysteme und ermöglichen es, Softwarepakete sicher, nachvollziehbar und konsistent zu identifizieren. Das schafft eine solide Basis für alle weiteren Sicherheits- und Lizenzierungsmaßnahmen im Software-Ökosystem und unterstützt die Bemühungen um mehr Transparenz und Vertrauenswürdigkeit in der digitalen Welt. Für Unternehmen, die SBOMs erstellen oder nutzen, für Entwicklungsteams mit umfangreichen Abhängigkeiten und für Sicherheitsanalysten ist die Kenntnis und Anwendung der PURL-Spezifikation heute unerlässlich.
Die Zukunft der Softwareversorgungsketten wird maßgeblich von Standards wie PURL geprägt sein, die eine genaue und maschinenlesbare Identifikation von Softwarekomponenten ermöglichen und damit die Basis für nachhaltige Sicherheit und Compliance legen.