CWE catalogue#
Vulnerability-Lookup imports CWE 5.x / schema 8 and remains compatible with
CWE 4.x / schema 7. The cwec feeder downloads MITRE’s latest complete XML
catalogue. Both default and prefixed CWE namespaces are supported; XHTML text
uses the xhtml: prefix in the stored JSON representation.
Catalogue entries and mapping guidance#
Weaknesses, groupings, and views are stored under their usual cwe-<number> keys
and included in index:cwec. The additive entry_type field identifies
Weakness, Grouping, or View. Schema 7 Category entries are exposed as
Grouping; their original content is retained. Records cached before this update
remain readable.
The CWE page keeps its vulnerability rankings and adds a Full catalogue view for searching entries that no vulnerability references yet, including the new Python, Go, and PLC coding guidance. Grouping and view detail pages show their summary or objective and membership links. These entries organize the catalogue; they are not appropriate root causes for vulnerability mappings. Both reporter and administrator disclosure forms restrict their CWE selectors to weaknesses before applying their result limit.
The CVE editor’s suggestions at /cwe/examples.json use the imported weaknesses,
most referenced first, and exclude deprecated entries and mapping usages
Discouraged and Prohibited.
The bundled suggestions remain a fallback when no suitable catalogue entries
have been imported. Existing vulnerability mappings, including mappings to now
deprecated CWEs, are retained rather than silently reassigned.
API#
GET /api/cwe/ lists the complete imported catalogue. Use
entry_type=Weakness to restrict the result to weaknesses, or Grouping or
View for those entry types. The existing exclude_discouraged and
exclude_prohibited flags compose with entry-type and vuln_id filters.
Filtering precedes pagination, and metadata.count is the total matching count.
The optional X-Fields response mask is also supported.
Examples:
/api/cwe/?entry_type=Weakness&exclude_prohibited=true
/api/cwe/?entry_type=Grouping&per_page=50&page=2
/api/cwe/?vuln_id=CVE-2026-1234
/api/cwe/CWE-1461
Both the API detail endpoint and website accept numeric identifiers such as
1461 and case-insensitive identifiers such as cwe-1461. Missing or invalid
entries return HTTP 404.
Both list and detail responses retain all XML-derived fields, including:
Technical_Nuanceand entry/relationshipDimensions;Overlapsrelationships, relationship notes, grouping relationships, and view members (OverlapsandPeerOfare symmetric);repeated introduction/detection
Phaseelements andCustom_Phaseelements, whose@Domainidentifies AI or Hardware and#textholds the phase;multiple
Content_History.Submissionrecords and multiple submission or contribution names;alternate-term roles, platform notes, and note
@Version/@ReleaseDate.
The detail endpoint preserves XML cardinality: a singleton is a scalar/object,
while repeated elements are lists. Structured text is either a string or an
object with XHTML-prefixed keys. Structured-text objects also include an additive
#text_blocks array extracted from the XML in document order. Readers should
prefer that array when presenting text: mixed inline markup cannot be accurately
reordered from xmltodict’s consolidated #text value. Original XHTML fields and
attributes are retained. The list endpoint normalizes
Related_Weaknesses.Related_Weakness and Potential_Mitigations.Mitigation to
lists, and mitigation Description to an array of plain text paragraphs. Older
versions stringified that paragraph list; consumers should now read the JSON
array directly. Other fields keep their XML-derived structure. The OpenAPI
reference documents the list and raw detail representations separately.
Upgrading#
After deploying the code, the next cwec feeder cycle automatically reimports
the catalogue once, even if its publication date equals the already imported
release. This handles the parallel schema 7 and schema 8 releases on the same
date and restores ordered XHTML text in previously imported records.
It also writes cwec:summaries, the per-entry summaries that the
filtered listings, the forms, and the editor suggestions read instead of
loading every record. Until then, these listings build the summaries from the
stored records, more slowly.
Subsequent unchanged releases are skipped normally. An explicit refresh
is also available:
poetry run cwec_importer --reimport
The importer indexes the newest available history date across submissions,
contributions, and modifications, falling back to the catalogue date when
history is absent. It preserves all submitter/contributor names. No SQL migration
is needed. Existing vulnerability-to-CWE sets and rankings continue to use the
same keys; index_cwe is only necessary when rebuilding those mappings from
vulnerability records, not for a catalogue refresh.
See the CWE 5.0 release announcement and published XML schema.