List attack patterns
Search and page through the CAPEC catalog.
GET/api/v1/capecs
The MITRE CAPEC attack-pattern catalog. Each entry carries its abstraction, status, typical severity and likelihood, prerequisites, consequences, mitigations, execution flow, and the weaknesses it targets. The q filter matches both name and description.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
q | query | string | Substring match against the pattern name and description. |
status | query | string | CAPEC status: Draft, Stable, ... |
severity | query | string | Typical severity: Very High, High, Medium, Low, Very Low. |
sort | query | string | Sort key: id, name, or severity (prefix - for descending). Default: id. |
limit | query | integer | Page size, 1–100. Default: 25. |
cursor | query | string | Opaque cursor from the previous page. |
Example request
curl "https://radicalnotion.ai/api/v1/capecs?q=deserial" \
-H "Authorization: Bearer $RN_TOKEN"Example response
{
"data": [
{
"capec_id": 586,
"capec_id_string": "CAPEC-586",
"name": "Object Injection",
"abstraction": "Meta",
"status": "Draft",
"description": "An adversary attempts to exploit an application by injecting additional, malicious content during its processing of serialized objects. Developers leverage serialization in order to convert data or state into a static, binary format for saving to disk or transferring over a network. These objects are then deserialized when needed to recover the data/state. By injecting a malformed object into a vulnerable application, an adversary can potentially compromise the application by manipulating the deserialization process. This can result in a number of unwanted outcomes, including remote code execution.",
"likelihood_of_attack": "Medium",
"typical_severity": "High",
"prerequisites": [
"The target application must unserialize data before validation."
],
"skills_required": [],
"resources_required": [],
"consequences": [
{
"scopes": [
"Availability"
],
"impacts": [
"Resource Consumption"
],
"note": "If a function is making an assumption on when to terminate, based on a sentry in a string, it could easily never terminate and exhaust available resources."
},
{
"scopes": [
"Integrity"
],
"impacts": [
"Modify Data"
],
"note": "Attackers can modify objects or data that was assumed to be safe from modification."
},
{
"scopes": [
"Authorization"
],
"impacts": [
"Execute Unauthorized Commands"
],
"note": "Functions that assume information in the deserialized object is valid could be exploited."
}
],
"mitigations": [
"Implementation: Validate object before deserialization process",
"Design: Limit which types can be deserialized.",
"Implementation: Avoid having unnecessary types or gadgets available that can be leveraged for malicious ends. Use an allowlist of acceptable classes.",
"Implementation: Keep session state on the server, when possible."
],
"execution_flow": [],
"related_weaknesses": [
{
"id": "cwe-502",
"display": "CWE-502",
"name": "Deserialization of Untrusted Data"
}
],
"related_attack_patterns": []
}
],
"pagination": {
"limit": 25,
"next_cursor": null
}
}Response schema
| Field | Type | Description |
|---|---|---|
data[].capec_id / capec_id_string | integer / string | Numeric id and CAPEC-NNN string form. |
data[].name / description | string | Pattern name and description. |
data[].abstraction / status | string | Abstraction (Meta, Standard, Detailed) and status. |
data[].likelihood_of_attack / typical_severity | string | null | Attack likelihood and typical severity. |
data[].prerequisites / skills_required / resources_required / mitigations | string[] | Preconditions and defenses. |
data[].consequences[] | object[] | Impact scopes, impacts, and notes. |
data[].execution_flow[] | object[] | Ordered attack steps, when documented. |
data[].related_weaknesses[] / related_attack_patterns[] | object[] | Linked CWEs and CAPECs. |
pagination.next_cursor | string | null | Pass as ?cursor= for the next page. |
Responses
| Status | Meaning |
|---|---|
200 | Success. |
400 | A path or query parameter failed validation. |
401 | Missing or invalid access token. |
429 | Rate limit exceeded. |
No attack pattern matches — empty data, null cursor.
{
"data": [],
"pagination": { "limit": 25, "next_cursor": null }
}