@blamejs/exceptd-skills 0.13.2 → 0.13.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +41 -4
- package/CHANGELOG.md +73 -0
- package/README.md +79 -13
- package/bin/exceptd.js +105 -1
- package/data/_indexes/_meta.json +47 -47
- package/data/_indexes/activity-feed.json +3 -3
- package/data/_indexes/catalog-summaries.json +3 -3
- package/data/_indexes/chains.json +125 -32
- package/data/_indexes/frequency.json +12 -0
- package/data/_indexes/handoff-dag.json +127 -57
- package/data/_indexes/section-offsets.json +541 -487
- package/data/_indexes/summary-cards.json +34 -34
- package/data/_indexes/token-budget.json +329 -299
- package/data/attack-techniques.json +2 -0
- package/data/cve-catalog.json +99 -146
- package/data/cwe-catalog.json +1 -0
- package/data/exploit-availability.json +0 -27
- package/data/framework-control-gaps.json +409 -0
- package/data/zeroday-lessons.json +71 -89
- package/lib/lint-skills.js +17 -13
- package/lib/schemas/playbook.schema.json +5 -0
- package/lib/source-advisories.js +26 -0
- package/manifest.json +82 -82
- package/orchestrator/index.js +147 -2
- package/package.json +1 -1
- package/sbom.cdx.json +61 -61
- package/skills/age-gates-child-safety/skill.md +2 -0
- package/skills/ai-attack-surface/skill.md +2 -0
- package/skills/ai-c2-detection/skill.md +2 -0
- package/skills/ai-risk-management/skill.md +2 -0
- package/skills/api-security/skill.md +16 -4
- package/skills/attack-surface-pentest/skill.md +2 -0
- package/skills/cloud-iam-incident/skill.md +1 -1
- package/skills/cloud-security/skill.md +2 -0
- package/skills/compliance-theater/skill.md +28 -2
- package/skills/container-runtime-security/skill.md +2 -0
- package/skills/coordinated-vuln-disclosure/skill.md +1 -1
- package/skills/defensive-countermeasure-mapping/skill.md +2 -0
- package/skills/dlp-gap-analysis/skill.md +2 -0
- package/skills/email-security-anti-phishing/skill.md +14 -4
- package/skills/exploit-scoring/skill.md +30 -1
- package/skills/framework-gap-analysis/skill.md +28 -1
- package/skills/fuzz-testing-strategy/skill.md +4 -2
- package/skills/global-grc/skill.md +2 -0
- package/skills/identity-assurance/skill.md +2 -0
- package/skills/kernel-lpe-triage/skill.md +2 -0
- package/skills/mcp-agent-trust/skill.md +4 -0
- package/skills/mlops-security/skill.md +2 -0
- package/skills/ot-ics-security/skill.md +2 -0
- package/skills/policy-exception-gen/skill.md +28 -1
- package/skills/pqc-first/skill.md +2 -0
- package/skills/rag-pipeline-security/skill.md +2 -0
- package/skills/researcher/skill.md +2 -0
- package/skills/sector-energy/skill.md +2 -0
- package/skills/sector-federal-government/skill.md +2 -0
- package/skills/sector-financial/skill.md +2 -0
- package/skills/sector-healthcare/skill.md +2 -0
- package/skills/security-maturity-tiers/skill.md +2 -0
- package/skills/skill-update-loop/skill.md +2 -0
- package/skills/supply-chain-integrity/skill.md +2 -0
- package/skills/threat-model-currency/skill.md +37 -1
- package/skills/threat-modeling-methodology/skill.md +2 -0
- package/skills/webapp-security/skill.md +2 -0
- package/skills/zeroday-gap-learn/skill.md +33 -1
package/sbom.cdx.json
CHANGED
|
@@ -1,22 +1,22 @@
|
|
|
1
1
|
{
|
|
2
2
|
"bomFormat": "CycloneDX",
|
|
3
3
|
"specVersion": "1.6",
|
|
4
|
-
"serialNumber": "urn:uuid:
|
|
4
|
+
"serialNumber": "urn:uuid:2817019c-3f65-4bd2-9eb6-c1eb0d9baa45",
|
|
5
5
|
"version": 1,
|
|
6
6
|
"metadata": {
|
|
7
|
-
"timestamp": "
|
|
7
|
+
"timestamp": "2047-04-25T16:19:40.000Z",
|
|
8
8
|
"tools": [
|
|
9
9
|
{
|
|
10
10
|
"vendor": "blamejs",
|
|
11
11
|
"name": "scripts/refresh-sbom.js",
|
|
12
|
-
"version": "0.13.
|
|
12
|
+
"version": "0.13.4"
|
|
13
13
|
}
|
|
14
14
|
],
|
|
15
15
|
"component": {
|
|
16
|
-
"bom-ref": "pkg:npm/@blamejs/exceptd-skills@0.13.
|
|
16
|
+
"bom-ref": "pkg:npm/@blamejs/exceptd-skills@0.13.4",
|
|
17
17
|
"type": "application",
|
|
18
18
|
"name": "@blamejs/exceptd-skills",
|
|
19
|
-
"version": "0.13.
|
|
19
|
+
"version": "0.13.4",
|
|
20
20
|
"description": "AI security skills grounded in mid-2026 threat reality, not stale framework documentation. 42 skills, 10 catalogs, 34 jurisdictions, pre-computed indexes, Ed25519-signed.",
|
|
21
21
|
"licenses": [
|
|
22
22
|
{
|
|
@@ -25,17 +25,17 @@
|
|
|
25
25
|
}
|
|
26
26
|
}
|
|
27
27
|
],
|
|
28
|
-
"purl": "pkg:npm/%40blamejs/exceptd-skills@0.13.
|
|
28
|
+
"purl": "pkg:npm/%40blamejs/exceptd-skills@0.13.4",
|
|
29
29
|
"hashes": [
|
|
30
30
|
{
|
|
31
31
|
"alg": "SHA-256",
|
|
32
|
-
"content": "
|
|
32
|
+
"content": "c2bd3ae64e303b098088db047fecec1eab56cc2e3021d6c54f73dcf4c5772ab6"
|
|
33
33
|
}
|
|
34
34
|
],
|
|
35
35
|
"externalReferences": [
|
|
36
36
|
{
|
|
37
37
|
"type": "distribution",
|
|
38
|
-
"url": "https://www.npmjs.com/package/@blamejs/exceptd-skills/v/0.13.
|
|
38
|
+
"url": "https://www.npmjs.com/package/@blamejs/exceptd-skills/v/0.13.4"
|
|
39
39
|
},
|
|
40
40
|
{
|
|
41
41
|
"type": "vcs",
|
|
@@ -86,7 +86,7 @@
|
|
|
86
86
|
"hashes": [
|
|
87
87
|
{
|
|
88
88
|
"alg": "SHA-256",
|
|
89
|
-
"content": "
|
|
89
|
+
"content": "fa1b15280e42f30c8509a37ad66e7bf875731f28bc7594ed887e11d268cc09f8"
|
|
90
90
|
}
|
|
91
91
|
]
|
|
92
92
|
},
|
|
@@ -108,7 +108,7 @@
|
|
|
108
108
|
"hashes": [
|
|
109
109
|
{
|
|
110
110
|
"alg": "SHA-256",
|
|
111
|
-
"content": "
|
|
111
|
+
"content": "0f22625bf1e0c95e9b831b34ca7f74fa011f2c9c2a011efdabe4eab783b2c918"
|
|
112
112
|
}
|
|
113
113
|
]
|
|
114
114
|
},
|
|
@@ -152,7 +152,7 @@
|
|
|
152
152
|
"hashes": [
|
|
153
153
|
{
|
|
154
154
|
"alg": "SHA-256",
|
|
155
|
-
"content": "
|
|
155
|
+
"content": "499743f3bd6784d495ab4ba9a18d7749e918c0b8c5ca8def9e46b334f70f4a14"
|
|
156
156
|
}
|
|
157
157
|
]
|
|
158
158
|
},
|
|
@@ -229,7 +229,7 @@
|
|
|
229
229
|
"hashes": [
|
|
230
230
|
{
|
|
231
231
|
"alg": "SHA-256",
|
|
232
|
-
"content": "
|
|
232
|
+
"content": "b3540a3296e5e901004d428351d40d3ac40b154da082071da2c00222c40b7b6e"
|
|
233
233
|
}
|
|
234
234
|
]
|
|
235
235
|
},
|
|
@@ -251,7 +251,7 @@
|
|
|
251
251
|
"hashes": [
|
|
252
252
|
{
|
|
253
253
|
"alg": "SHA-256",
|
|
254
|
-
"content": "
|
|
254
|
+
"content": "76461dbec048c5e072435d57e3a04b780e3992dab9f316b1b52608e0a997e355"
|
|
255
255
|
}
|
|
256
256
|
]
|
|
257
257
|
},
|
|
@@ -262,7 +262,7 @@
|
|
|
262
262
|
"hashes": [
|
|
263
263
|
{
|
|
264
264
|
"alg": "SHA-256",
|
|
265
|
-
"content": "
|
|
265
|
+
"content": "68d4c20ee97ec90cb5f33f53df512788921b0920687c69fa50d8a83189fb98fa"
|
|
266
266
|
}
|
|
267
267
|
]
|
|
268
268
|
},
|
|
@@ -273,7 +273,7 @@
|
|
|
273
273
|
"hashes": [
|
|
274
274
|
{
|
|
275
275
|
"alg": "SHA-256",
|
|
276
|
-
"content": "
|
|
276
|
+
"content": "4a0036f9ec17af29e0df111ac77b94f8be6a52742bfd89ff3583096d23b75e35"
|
|
277
277
|
}
|
|
278
278
|
]
|
|
279
279
|
},
|
|
@@ -306,7 +306,7 @@
|
|
|
306
306
|
"hashes": [
|
|
307
307
|
{
|
|
308
308
|
"alg": "SHA-256",
|
|
309
|
-
"content": "
|
|
309
|
+
"content": "ec2656f0d9a893610e27b43eb6035fe9b18e057c9f6dfaac7e7d4959bbcbb795"
|
|
310
310
|
}
|
|
311
311
|
]
|
|
312
312
|
},
|
|
@@ -317,7 +317,7 @@
|
|
|
317
317
|
"hashes": [
|
|
318
318
|
{
|
|
319
319
|
"alg": "SHA-256",
|
|
320
|
-
"content": "
|
|
320
|
+
"content": "994bf3203f3a2c80fe21194d00f67ecffa77b80193ba3f4b046e9d38e7b09f0f"
|
|
321
321
|
}
|
|
322
322
|
]
|
|
323
323
|
},
|
|
@@ -570,7 +570,7 @@
|
|
|
570
570
|
"hashes": [
|
|
571
571
|
{
|
|
572
572
|
"alg": "SHA-256",
|
|
573
|
-
"content": "
|
|
573
|
+
"content": "3d4c18977f2100f200e209dc55331931a5d0adc54af35879fc58f1b43deac56f"
|
|
574
574
|
}
|
|
575
575
|
]
|
|
576
576
|
},
|
|
@@ -691,7 +691,7 @@
|
|
|
691
691
|
"hashes": [
|
|
692
692
|
{
|
|
693
693
|
"alg": "SHA-256",
|
|
694
|
-
"content": "
|
|
694
|
+
"content": "48aa70089fe9fc3bee80e19042d28d91ceb996ed018b6131db970dba7cadb90e"
|
|
695
695
|
}
|
|
696
696
|
]
|
|
697
697
|
},
|
|
@@ -768,7 +768,7 @@
|
|
|
768
768
|
"hashes": [
|
|
769
769
|
{
|
|
770
770
|
"alg": "SHA-256",
|
|
771
|
-
"content": "
|
|
771
|
+
"content": "fb6c41c37cb9249f7f702722158351fca7c7a9a9e8a144fde4a1c709de4e1836"
|
|
772
772
|
}
|
|
773
773
|
]
|
|
774
774
|
},
|
|
@@ -812,7 +812,7 @@
|
|
|
812
812
|
"hashes": [
|
|
813
813
|
{
|
|
814
814
|
"alg": "SHA-256",
|
|
815
|
-
"content": "
|
|
815
|
+
"content": "63702da0ef17b9dd32cff349473d5e1c32aae763cd769936a07570e34cb6b824"
|
|
816
816
|
}
|
|
817
817
|
]
|
|
818
818
|
},
|
|
@@ -988,7 +988,7 @@
|
|
|
988
988
|
"hashes": [
|
|
989
989
|
{
|
|
990
990
|
"alg": "SHA-256",
|
|
991
|
-
"content": "
|
|
991
|
+
"content": "821b61225c10b09eebad72fc94faf1a0627ad0be223427ba477c64704bc260b8"
|
|
992
992
|
}
|
|
993
993
|
]
|
|
994
994
|
},
|
|
@@ -1032,7 +1032,7 @@
|
|
|
1032
1032
|
"hashes": [
|
|
1033
1033
|
{
|
|
1034
1034
|
"alg": "SHA-256",
|
|
1035
|
-
"content": "
|
|
1035
|
+
"content": "b827fb5d2a43409ba2c390b000e175c9357b86137d25d6647ff238b94922275b"
|
|
1036
1036
|
}
|
|
1037
1037
|
]
|
|
1038
1038
|
},
|
|
@@ -1417,7 +1417,7 @@
|
|
|
1417
1417
|
"hashes": [
|
|
1418
1418
|
{
|
|
1419
1419
|
"alg": "SHA-256",
|
|
1420
|
-
"content": "
|
|
1420
|
+
"content": "51ffbbc0743daa26d6c7fe55ff6ec223dccb2087ddca981e06ab7133230e9ec5"
|
|
1421
1421
|
}
|
|
1422
1422
|
]
|
|
1423
1423
|
},
|
|
@@ -1428,7 +1428,7 @@
|
|
|
1428
1428
|
"hashes": [
|
|
1429
1429
|
{
|
|
1430
1430
|
"alg": "SHA-256",
|
|
1431
|
-
"content": "
|
|
1431
|
+
"content": "d1361c53c8360999e1ec6a403bcbfaa53d0afc11689e8781d26081196dd079d4"
|
|
1432
1432
|
}
|
|
1433
1433
|
]
|
|
1434
1434
|
},
|
|
@@ -1439,7 +1439,7 @@
|
|
|
1439
1439
|
"hashes": [
|
|
1440
1440
|
{
|
|
1441
1441
|
"alg": "SHA-256",
|
|
1442
|
-
"content": "
|
|
1442
|
+
"content": "490511ad517a0c3ad64f6a951c36cffb3109fed2c5da6376b5efc50e799e02a9"
|
|
1443
1443
|
}
|
|
1444
1444
|
]
|
|
1445
1445
|
},
|
|
@@ -1450,7 +1450,7 @@
|
|
|
1450
1450
|
"hashes": [
|
|
1451
1451
|
{
|
|
1452
1452
|
"alg": "SHA-256",
|
|
1453
|
-
"content": "
|
|
1453
|
+
"content": "686f53c2aee3a44108d1fa3e5f52fc7d971edc00946cfc1f082e4658af25fddc"
|
|
1454
1454
|
}
|
|
1455
1455
|
]
|
|
1456
1456
|
},
|
|
@@ -1461,7 +1461,7 @@
|
|
|
1461
1461
|
"hashes": [
|
|
1462
1462
|
{
|
|
1463
1463
|
"alg": "SHA-256",
|
|
1464
|
-
"content": "
|
|
1464
|
+
"content": "8a79a28b7b1c3088672bc09017a0d2481e45fb1c0f89768e87642268b62d4808"
|
|
1465
1465
|
}
|
|
1466
1466
|
]
|
|
1467
1467
|
},
|
|
@@ -1472,7 +1472,7 @@
|
|
|
1472
1472
|
"hashes": [
|
|
1473
1473
|
{
|
|
1474
1474
|
"alg": "SHA-256",
|
|
1475
|
-
"content": "
|
|
1475
|
+
"content": "e845c4e08adef038888a025bf920a042c851df41ca53f41aa5fc11ec02a37fbb"
|
|
1476
1476
|
}
|
|
1477
1477
|
]
|
|
1478
1478
|
},
|
|
@@ -1483,7 +1483,7 @@
|
|
|
1483
1483
|
"hashes": [
|
|
1484
1484
|
{
|
|
1485
1485
|
"alg": "SHA-256",
|
|
1486
|
-
"content": "
|
|
1486
|
+
"content": "5ec3800a0049b2123aff67bfab4ff28491a86d2daeb712283e5e88b10c3d5d7b"
|
|
1487
1487
|
}
|
|
1488
1488
|
]
|
|
1489
1489
|
},
|
|
@@ -1494,7 +1494,7 @@
|
|
|
1494
1494
|
"hashes": [
|
|
1495
1495
|
{
|
|
1496
1496
|
"alg": "SHA-256",
|
|
1497
|
-
"content": "
|
|
1497
|
+
"content": "84844b369f3195eae06115b392b4ceb41d96c1b3fda254f82c37cd8165858e7f"
|
|
1498
1498
|
}
|
|
1499
1499
|
]
|
|
1500
1500
|
},
|
|
@@ -1505,7 +1505,7 @@
|
|
|
1505
1505
|
"hashes": [
|
|
1506
1506
|
{
|
|
1507
1507
|
"alg": "SHA-256",
|
|
1508
|
-
"content": "
|
|
1508
|
+
"content": "42babdc846b3e91af6be4698c7b5e876d9dd5cdb214d1aa2b4faceb6773e4ed1"
|
|
1509
1509
|
}
|
|
1510
1510
|
]
|
|
1511
1511
|
},
|
|
@@ -1516,7 +1516,7 @@
|
|
|
1516
1516
|
"hashes": [
|
|
1517
1517
|
{
|
|
1518
1518
|
"alg": "SHA-256",
|
|
1519
|
-
"content": "
|
|
1519
|
+
"content": "d608fc7cc9e7c89640101078623490596b1610f7020eecde0d696e5c5084f932"
|
|
1520
1520
|
}
|
|
1521
1521
|
]
|
|
1522
1522
|
},
|
|
@@ -1527,7 +1527,7 @@
|
|
|
1527
1527
|
"hashes": [
|
|
1528
1528
|
{
|
|
1529
1529
|
"alg": "SHA-256",
|
|
1530
|
-
"content": "
|
|
1530
|
+
"content": "6c85b8761e557069ae0623400a2218a81356e5426f0a4e3ddebdc2a569735c9b"
|
|
1531
1531
|
}
|
|
1532
1532
|
]
|
|
1533
1533
|
},
|
|
@@ -1538,7 +1538,7 @@
|
|
|
1538
1538
|
"hashes": [
|
|
1539
1539
|
{
|
|
1540
1540
|
"alg": "SHA-256",
|
|
1541
|
-
"content": "
|
|
1541
|
+
"content": "331a0248dd8ed3b509b759c41a9a4d6d8d6dc67fb732ad31d1a4c2d9a0865054"
|
|
1542
1542
|
}
|
|
1543
1543
|
]
|
|
1544
1544
|
},
|
|
@@ -1549,7 +1549,7 @@
|
|
|
1549
1549
|
"hashes": [
|
|
1550
1550
|
{
|
|
1551
1551
|
"alg": "SHA-256",
|
|
1552
|
-
"content": "
|
|
1552
|
+
"content": "6aa0960d85465006cdffcce3478dc790a14fd1cc95c73e124d5809836c26a4c4"
|
|
1553
1553
|
}
|
|
1554
1554
|
]
|
|
1555
1555
|
},
|
|
@@ -1560,7 +1560,7 @@
|
|
|
1560
1560
|
"hashes": [
|
|
1561
1561
|
{
|
|
1562
1562
|
"alg": "SHA-256",
|
|
1563
|
-
"content": "
|
|
1563
|
+
"content": "250f266908f51f99a4cb3aec0d5dacfcf91fac9f3d95e5a117429a40ed2ff45a"
|
|
1564
1564
|
}
|
|
1565
1565
|
]
|
|
1566
1566
|
},
|
|
@@ -1571,7 +1571,7 @@
|
|
|
1571
1571
|
"hashes": [
|
|
1572
1572
|
{
|
|
1573
1573
|
"alg": "SHA-256",
|
|
1574
|
-
"content": "
|
|
1574
|
+
"content": "9f50b4d52c470d5616fc1626589843a5b2602d209436ded08cc9cc9885df770c"
|
|
1575
1575
|
}
|
|
1576
1576
|
]
|
|
1577
1577
|
},
|
|
@@ -1582,7 +1582,7 @@
|
|
|
1582
1582
|
"hashes": [
|
|
1583
1583
|
{
|
|
1584
1584
|
"alg": "SHA-256",
|
|
1585
|
-
"content": "
|
|
1585
|
+
"content": "04e841fc426f92f20c254497b3b92b54d603062a0e6a617f3e9d607d6115c097"
|
|
1586
1586
|
}
|
|
1587
1587
|
]
|
|
1588
1588
|
},
|
|
@@ -1593,7 +1593,7 @@
|
|
|
1593
1593
|
"hashes": [
|
|
1594
1594
|
{
|
|
1595
1595
|
"alg": "SHA-256",
|
|
1596
|
-
"content": "
|
|
1596
|
+
"content": "1088d1ef5a0b4b2e50b356e3ff766a3ba6c66ba3435caf394d7c9c493d45b17e"
|
|
1597
1597
|
}
|
|
1598
1598
|
]
|
|
1599
1599
|
},
|
|
@@ -1604,7 +1604,7 @@
|
|
|
1604
1604
|
"hashes": [
|
|
1605
1605
|
{
|
|
1606
1606
|
"alg": "SHA-256",
|
|
1607
|
-
"content": "
|
|
1607
|
+
"content": "57ca729034e9d33c527d869c1c4aa82fe37e496878a3cbcd9e5043cb62b7105d"
|
|
1608
1608
|
}
|
|
1609
1609
|
]
|
|
1610
1610
|
},
|
|
@@ -1615,7 +1615,7 @@
|
|
|
1615
1615
|
"hashes": [
|
|
1616
1616
|
{
|
|
1617
1617
|
"alg": "SHA-256",
|
|
1618
|
-
"content": "
|
|
1618
|
+
"content": "f3c29ce17aaa426b65b58238e5bc9ccabcda23a8d350e597840e5d6d664aa102"
|
|
1619
1619
|
}
|
|
1620
1620
|
]
|
|
1621
1621
|
},
|
|
@@ -1648,7 +1648,7 @@
|
|
|
1648
1648
|
"hashes": [
|
|
1649
1649
|
{
|
|
1650
1650
|
"alg": "SHA-256",
|
|
1651
|
-
"content": "
|
|
1651
|
+
"content": "08b3e9815ba481c57c80f5fc0ccbf5bb7cbb41f570c235ba6ff9596b8c07354d"
|
|
1652
1652
|
}
|
|
1653
1653
|
]
|
|
1654
1654
|
},
|
|
@@ -1659,7 +1659,7 @@
|
|
|
1659
1659
|
"hashes": [
|
|
1660
1660
|
{
|
|
1661
1661
|
"alg": "SHA-256",
|
|
1662
|
-
"content": "
|
|
1662
|
+
"content": "19a6b54375808e59143070011328d8c936836845bca4a484108738bbef290694"
|
|
1663
1663
|
}
|
|
1664
1664
|
]
|
|
1665
1665
|
},
|
|
@@ -1670,7 +1670,7 @@
|
|
|
1670
1670
|
"hashes": [
|
|
1671
1671
|
{
|
|
1672
1672
|
"alg": "SHA-256",
|
|
1673
|
-
"content": "
|
|
1673
|
+
"content": "44fc3a4a6118e764a4bef840358c98d01b87f6e47bac9dd88e2df7633573414a"
|
|
1674
1674
|
}
|
|
1675
1675
|
]
|
|
1676
1676
|
},
|
|
@@ -1681,7 +1681,7 @@
|
|
|
1681
1681
|
"hashes": [
|
|
1682
1682
|
{
|
|
1683
1683
|
"alg": "SHA-256",
|
|
1684
|
-
"content": "
|
|
1684
|
+
"content": "33d3d82c87ed8708839f5211bb7b59a924c2e3d9c5d915dc2cc101c53176145e"
|
|
1685
1685
|
}
|
|
1686
1686
|
]
|
|
1687
1687
|
},
|
|
@@ -1692,7 +1692,7 @@
|
|
|
1692
1692
|
"hashes": [
|
|
1693
1693
|
{
|
|
1694
1694
|
"alg": "SHA-256",
|
|
1695
|
-
"content": "
|
|
1695
|
+
"content": "1e758322d74386f5c48d5bf5d7a4b4adfcef29553aca6d7c610845953beb8228"
|
|
1696
1696
|
}
|
|
1697
1697
|
]
|
|
1698
1698
|
},
|
|
@@ -1703,7 +1703,7 @@
|
|
|
1703
1703
|
"hashes": [
|
|
1704
1704
|
{
|
|
1705
1705
|
"alg": "SHA-256",
|
|
1706
|
-
"content": "
|
|
1706
|
+
"content": "07b38278b60d2437603a541c1ee954999abfe3a192f94b43cd384023738a0c1f"
|
|
1707
1707
|
}
|
|
1708
1708
|
]
|
|
1709
1709
|
},
|
|
@@ -1714,7 +1714,7 @@
|
|
|
1714
1714
|
"hashes": [
|
|
1715
1715
|
{
|
|
1716
1716
|
"alg": "SHA-256",
|
|
1717
|
-
"content": "
|
|
1717
|
+
"content": "4a64b4bc317141a219bcba40593f1994f791103381fd91c17ce23d06b0f6bc4e"
|
|
1718
1718
|
}
|
|
1719
1719
|
]
|
|
1720
1720
|
},
|
|
@@ -1736,7 +1736,7 @@
|
|
|
1736
1736
|
"hashes": [
|
|
1737
1737
|
{
|
|
1738
1738
|
"alg": "SHA-256",
|
|
1739
|
-
"content": "
|
|
1739
|
+
"content": "959aeba706eea43a69136561968d7942dcd981d0a6c3da7db47673c51943b6df"
|
|
1740
1740
|
}
|
|
1741
1741
|
]
|
|
1742
1742
|
},
|
|
@@ -1747,7 +1747,7 @@
|
|
|
1747
1747
|
"hashes": [
|
|
1748
1748
|
{
|
|
1749
1749
|
"alg": "SHA-256",
|
|
1750
|
-
"content": "
|
|
1750
|
+
"content": "efc7681d62b23aaad277e9018687362717bb1fcfb29d7ada844dfb7196870c78"
|
|
1751
1751
|
}
|
|
1752
1752
|
]
|
|
1753
1753
|
},
|
|
@@ -1758,7 +1758,7 @@
|
|
|
1758
1758
|
"hashes": [
|
|
1759
1759
|
{
|
|
1760
1760
|
"alg": "SHA-256",
|
|
1761
|
-
"content": "
|
|
1761
|
+
"content": "91e3eecdc18d108c669d49db1221ac89041a43c8294c8be65d4397cd149d75d0"
|
|
1762
1762
|
}
|
|
1763
1763
|
]
|
|
1764
1764
|
},
|
|
@@ -1769,7 +1769,7 @@
|
|
|
1769
1769
|
"hashes": [
|
|
1770
1770
|
{
|
|
1771
1771
|
"alg": "SHA-256",
|
|
1772
|
-
"content": "
|
|
1772
|
+
"content": "4c4c6fb95c6c2fd6cad3fec8ab8e08076fd4ddfa89ad5f00de017e546e01044d"
|
|
1773
1773
|
}
|
|
1774
1774
|
]
|
|
1775
1775
|
},
|
|
@@ -1780,7 +1780,7 @@
|
|
|
1780
1780
|
"hashes": [
|
|
1781
1781
|
{
|
|
1782
1782
|
"alg": "SHA-256",
|
|
1783
|
-
"content": "
|
|
1783
|
+
"content": "9f3164def71c1f6f78b074ffc452bd02d8b71b313f2feb1554289bd5a099b4e9"
|
|
1784
1784
|
}
|
|
1785
1785
|
]
|
|
1786
1786
|
},
|
|
@@ -1802,7 +1802,7 @@
|
|
|
1802
1802
|
"hashes": [
|
|
1803
1803
|
{
|
|
1804
1804
|
"alg": "SHA-256",
|
|
1805
|
-
"content": "
|
|
1805
|
+
"content": "c1e699e4d48a7f89c32fbc9f2fe64c721a61603624eb93afae7148348cc4637d"
|
|
1806
1806
|
}
|
|
1807
1807
|
]
|
|
1808
1808
|
},
|
|
@@ -1813,7 +1813,7 @@
|
|
|
1813
1813
|
"hashes": [
|
|
1814
1814
|
{
|
|
1815
1815
|
"alg": "SHA-256",
|
|
1816
|
-
"content": "
|
|
1816
|
+
"content": "eb67e2466230e143784b6e741c6ce7ea3e0c0e4385e5ab21b81b8de04f0168e2"
|
|
1817
1817
|
}
|
|
1818
1818
|
]
|
|
1819
1819
|
},
|
|
@@ -1824,7 +1824,7 @@
|
|
|
1824
1824
|
"hashes": [
|
|
1825
1825
|
{
|
|
1826
1826
|
"alg": "SHA-256",
|
|
1827
|
-
"content": "
|
|
1827
|
+
"content": "aea9c61c09e1ec714e129a6000d7b91ddbc74db52a64aa8bc95d3c698bf4ece6"
|
|
1828
1828
|
}
|
|
1829
1829
|
]
|
|
1830
1830
|
},
|
|
@@ -1835,7 +1835,7 @@
|
|
|
1835
1835
|
"hashes": [
|
|
1836
1836
|
{
|
|
1837
1837
|
"alg": "SHA-256",
|
|
1838
|
-
"content": "
|
|
1838
|
+
"content": "38dc4369132fd199d10cebf3287ed8e35ffb0cf3eefbb98ec17d57027a5df7f1"
|
|
1839
1839
|
}
|
|
1840
1840
|
]
|
|
1841
1841
|
},
|
|
@@ -1846,7 +1846,7 @@
|
|
|
1846
1846
|
"hashes": [
|
|
1847
1847
|
{
|
|
1848
1848
|
"alg": "SHA-256",
|
|
1849
|
-
"content": "
|
|
1849
|
+
"content": "ba175224737571f9c6148e4cbe47b9ebaa762592cc659b7fb2cf0e9a6b3679c0"
|
|
1850
1850
|
}
|
|
1851
1851
|
]
|
|
1852
1852
|
},
|
|
@@ -1857,7 +1857,7 @@
|
|
|
1857
1857
|
"hashes": [
|
|
1858
1858
|
{
|
|
1859
1859
|
"alg": "SHA-256",
|
|
1860
|
-
"content": "
|
|
1860
|
+
"content": "135ca1cd01476b4df9ba7fbba2f194d0cac521480b51d479d60045d9abfc0350"
|
|
1861
1861
|
}
|
|
1862
1862
|
]
|
|
1863
1863
|
},
|
|
@@ -1868,7 +1868,7 @@
|
|
|
1868
1868
|
"hashes": [
|
|
1869
1869
|
{
|
|
1870
1870
|
"alg": "SHA-256",
|
|
1871
|
-
"content": "
|
|
1871
|
+
"content": "adcb681f90ab3c58a98c7935fd8bad102d7ed16b6db6235661483ec1be6cf410"
|
|
1872
1872
|
}
|
|
1873
1873
|
]
|
|
1874
1874
|
},
|
|
@@ -287,6 +287,8 @@ Produce a single per-control mapping across all in-scope jurisdictions; disparat
|
|
|
287
287
|
|
|
288
288
|
## Output Format
|
|
289
289
|
|
|
290
|
+
The skill produces an Age Gates and Child-Safeguarding Posture Assessment covering US COPPA / CIPA, California AADC, UK Children's Code (ICO), Ireland Fundamentals for a Child-Oriented Approach, EU DSA Art. 28 (online platforms), KOSA (US, where enacted), GDPR Art. 8, AU Online Safety Act + eSafety Basic Online Safety Expectations, and emerging KSA / SG / IN child-protection guidance. The shape below is consumed downstream by `dlp-gap-analysis` (for child-data flow detection), by `incident-response-playbook` (for child-data breach notification clocks), and by `global-grc` (for cross-jurisdictional rollup). Preserve the per-jurisdiction obligation rows verbatim — they are the auditable evidence for regulator inquiries.
|
|
291
|
+
|
|
290
292
|
Produce this structure verbatim:
|
|
291
293
|
|
|
292
294
|
```
|
|
@@ -270,6 +270,8 @@ For each identified risk, declare the framework gap:
|
|
|
270
270
|
|
|
271
271
|
## Output Format
|
|
272
272
|
|
|
273
|
+
The assessment produces a structured AI Attack Surface Assessment report. The shape below is consumed downstream by `mcp-agent-trust` (which converts the MCP Trust Assessment section into per-server policy), by `rag-pipeline-security` (which picks up any RAG-pipeline entries from the Surface Inventory), and by `incident-response-playbook` (which scopes IR against the prompt-injection and AI-C2 exposure bands). CSAF-style auditor evidence bundles consume the Framework Gaps and ATLAS TTP Coverage Gaps sections verbatim — preserve the framework-control IDs as cited.
|
|
274
|
+
|
|
273
275
|
```
|
|
274
276
|
## AI Attack Surface Assessment
|
|
275
277
|
|
|
@@ -443,6 +443,8 @@ D3FEND v1.0+ references from `data/d3fend-catalog.json`. Maps the SesameOp / PRO
|
|
|
443
443
|
|
|
444
444
|
## Output Format
|
|
445
445
|
|
|
446
|
+
The skill produces a structured AI C2 Detection Assessment covering per-host AI-API egress baselines, behavioral anomaly indicators, and SesameOp-class C2-pattern findings. The shape below is consumed downstream by `incident-response-playbook` (which scopes IR against confirmed C2 indicators), by `ai-attack-surface` (which integrates the detection-gap section into the broader AI surface report), and by `compliance-theater` (which compares the AI-API monitoring coverage against any SI-4 / CC7 anomaly-detection compliance claim). Preserve the per-host egress-baseline shape verbatim — it is the load-bearing detection artifact.
|
|
447
|
+
|
|
446
448
|
```
|
|
447
449
|
## AI C2 Detection Assessment
|
|
448
450
|
|
|
@@ -221,6 +221,8 @@ Re-run cadence: per Hard Rule AGENTS.md #12, when ATLAS, EU AI Act implementing
|
|
|
221
221
|
|
|
222
222
|
## Output Format
|
|
223
223
|
|
|
224
|
+
The skill produces a structured AI Risk Management Programme assessment scoring the org against ISO/IEC 42001:2023, ISO/IEC 23894:2023, NIST AI RMF 1.0, EU AI Act (Regulation 2024/1689) high-risk-system obligations, and the jurisdiction-specific AI frameworks tracked in `data/global-frameworks.json`. The shape below is consumed downstream by `compliance-theater` (which compares the AI-RM policy against deployed controls), by `ai-attack-surface` (which inherits the AI-system inventory), and by `global-grc` (for cross-jurisdictional AI rollup). Preserve the per-standard control-coverage rows verbatim — they are the auditable derivation of the programme score.
|
|
225
|
+
|
|
224
226
|
```
|
|
225
227
|
## AI Risk Management Programme — <organisation / scope>
|
|
226
228
|
**Assessment Date:** YYYY-MM-DD
|
|
@@ -17,7 +17,13 @@ triggers:
|
|
|
17
17
|
- ai api security
|
|
18
18
|
- mcp transport
|
|
19
19
|
- openapi security
|
|
20
|
-
data_deps:
|
|
20
|
+
data_deps:
|
|
21
|
+
- atlas-ttps.json
|
|
22
|
+
- attack-techniques.json
|
|
23
|
+
- cwe-catalog.json
|
|
24
|
+
- d3fend-catalog.json
|
|
25
|
+
- framework-control-gaps.json
|
|
26
|
+
- rfc-references.json
|
|
21
27
|
atlas_refs:
|
|
22
28
|
- AML.T0096
|
|
23
29
|
- AML.T0017
|
|
@@ -61,7 +67,7 @@ forward_watch:
|
|
|
61
67
|
- NGINX Rift CVE-2026-42945 (disclosed 2026-05-13, source depthfirst) — KEV-watch predicted CISA KEV listing by 2026-05-29; track for active-exploitation confirmation and patch advisory affecting API gateway / reverse-proxy deployments
|
|
62
68
|
- Pwn2Own Berlin 2026 (disclosed 2026-05-14, embargo ends 2026-08-12) — LiteLLM 3-bug SSRF + Code Injection chain by k3vg3n; LLM-proxy API surface; track upstream patch and CVE assignments
|
|
63
69
|
- Pwn2Own Berlin 2026 (disclosed 2026-05-14, embargo ends 2026-08-12) — LiteLLM full SSRF + Code Injection by Out Of Bounds (Byung Young Yi); duplicate-class with the k3vg3n entry; track unified patch advisory
|
|
64
|
-
last_threat_review: "2026-05-
|
|
70
|
+
last_threat_review: "2026-05-18"
|
|
65
71
|
---
|
|
66
72
|
|
|
67
73
|
# API Security Assessment
|
|
@@ -130,7 +136,7 @@ APIs are now the integration substrate of every non-trivial system. The mid-2026
|
|
|
130
136
|
| AML.T0096 | AI Service Exploitation (AI-API as covert C2) | LLM API used as a covert command-and-control / exfil channel — prompt content carries instructions; response carries staged data | CWE-77, CWE-200 | Missing in NIST/ISO; hand-off to `ai-c2-detection` |
|
|
131
137
|
| AML.T0017 | Discover ML Model Ontology (inference-API probing for system-prompt, guardrail, model-family signal) | High-volume queries against a hosted model used to reconstruct behaviour, guardrail surface, or training-data signal | CWE-200 | Missing — detected only by per-identity rate-and-shape monitoring at egress |
|
|
132
138
|
|
|
133
|
-
CWE root-causes referenced as a set (per `cwe_refs` in frontmatter): CWE-287 (Improper Authentication), CWE-862 (Missing Authorization — BFLA root cause), CWE-863 (Incorrect Authorization — BOLA root cause), CWE-918 (SSRF — API7), CWE-200 (Information Exposure — BOPLA contributor), CWE-352 (CSRF — cookie-auth APIs + WebSocket CSWSH), CWE-22 (Path Traversal — API parameter sinks), CWE-77 (Command Injection — API parameter to shell), CWE-1188 (Insecure Default Initialization — default-open API state).
|
|
139
|
+
CWE root-causes referenced as a set (per `cwe_refs` in frontmatter, all resolved against `data/cwe-catalog.json`): CWE-287 (Improper Authentication), CWE-862 (Missing Authorization — BFLA root cause), CWE-863 (Incorrect Authorization — BOLA root cause), CWE-918 (SSRF — API7), CWE-200 (Information Exposure — BOPLA contributor), CWE-352 (CSRF — cookie-auth APIs + WebSocket CSWSH), CWE-22 (Path Traversal — API parameter sinks), CWE-77 (Command Injection — API parameter to shell), CWE-1188 (Insecure Default Initialization — default-open API state). ATT&CK Enterprise techniques (T1190, T1078, T1567) resolve against `data/attack-techniques.json`; the AML.T0096 (AI service exploitation) and AML.T0017 (model-ontology discovery) entries resolve against `data/atlas-ttps.json`. Cross-reference every BOLA / BFLA finding against the `CWE-863` / `CWE-862` entries in `data/cwe-catalog.json` for the canonical weakness description used in operator briefings.
|
|
134
140
|
|
|
135
141
|
---
|
|
136
142
|
|
|
@@ -158,6 +164,8 @@ CWE root-causes referenced as a set (per `cwe_refs` in frontmatter): CWE-287 (Im
|
|
|
158
164
|
|
|
159
165
|
The procedure threads three foundational design principles. They are not optional.
|
|
160
166
|
|
|
167
|
+
Wire-level RFC mappings cited below resolve against `data/rfc-references.json` (RFC-7519 JWT, RFC-8725 JWT BCP, RFC-6749 OAuth 2.0, RFC-9700 OAuth Security BCP, RFC-9421 HTTP Message Signatures, RFC-8446 TLS 1.3, RFC-9114 HTTP/3); framework-gap IDs cited throughout (OWASP-ASVS-v5.0-V14, NIST-800-53-AC-2, NIST-800-218-SSDF, ISO-27001-2022-A.8.28, NIS2-Art21-incident-handling, UK-CAF-B2, AU-Essential-8-App-Hardening) resolve against `data/framework-control-gaps.json`.
|
|
168
|
+
|
|
161
169
|
**Defense in depth** — the API request lifecycle is layered. No single control is trusted to fail closed.
|
|
162
170
|
|
|
163
171
|
1. **API gateway (perimeter)** — terminates TLS (RFC 8446 baseline; HTTP/3 over QUIC per RFC 9114 for public global APIs), enforces auth, enforces rate limits per route + per identity + per cost-unit, applies threat-detection rules, captures the canonical log record. Gateways with bypass paths (a "direct backend" route that skips the gateway) are gateway-in-name-only.
|
|
@@ -198,12 +206,14 @@ The procedure threads three foundational design principles. They are not optiona
|
|
|
198
206
|
7. **GraphQL query-complexity limits.** Depth limit, breadth (alias) limit, complexity-cost calculator with budget per query, persisted-query allowlist for production clients. **Introspection disabled in production.**
|
|
199
207
|
8. **gRPC reflection disabled in production.** mTLS for service-to-service; per-method authorisation (BFLA in gRPC terms is per-method); deadline propagation enforced; max-message-size bounded.
|
|
200
208
|
9. **WebSocket origin validation at upgrade + CSRF / sender-constrained token thereafter.** Per-message authorisation if the channel multiplexes operations across resources; rate-limit per connection AND per identity (one identity cannot fan out across many connections to bypass).
|
|
201
|
-
10. **MCP transport audit (hand-off to `mcp-agent-trust`) and AI-API egress map (hand-off to `ai-c2-detection`).** Document every MCP server and every AI-API destination. Per-destination quota with explicit USD cap; per-identity rate-and-shape baseline; D3-NTA egress monitoring fed to SIEM. AI-API keys treated as the most sensitive credential class — rotation cadence ≤ 30 days, automated key-leak scanning on commits.
|
|
209
|
+
10. **MCP transport audit (hand-off to `mcp-agent-trust`) and AI-API egress map (hand-off to `ai-c2-detection`).** Document every MCP server and every AI-API destination. Per-destination quota with explicit USD cap; per-identity rate-and-shape baseline; D3-NTA egress monitoring fed to SIEM. AI-API keys treated as the most sensitive credential class — rotation cadence ≤ 30 days, automated key-leak scanning on commits. The egress map cross-references the AML.T0096 / AML.T0017 catalog entries in `data/atlas-ttps.json` so that egress-baseline rules can be authored against the canonical TTP IDs rather than ad-hoc local names.
|
|
202
210
|
|
|
203
211
|
---
|
|
204
212
|
|
|
205
213
|
## Output Format
|
|
206
214
|
|
|
215
|
+
The skill produces an API Security Assessment covering REST / GraphQL / gRPC / WebSocket / MCP per-surface coverage, OWASP API Top 10 2023 + OWASP API Sec for LLM Top 10 mapping, per-endpoint authentication / authorization / rate-limit / schema-validation evidence, and the prioritized remediation roadmap. The shape below is consumed downstream by `webapp-security` (for browser-facing APIs), by `mcp-agent-trust` (for MCP surfaces), and by `compliance-theater` (which compares the deployed API controls against PCI 4.0 6.2 / OWASP ASVS L2-L3 claims). Preserve the per-endpoint control-evidence rows verbatim — they are the auditable derivation of the API-surface risk score.
|
|
216
|
+
|
|
207
217
|
```
|
|
208
218
|
## API Security Assessment
|
|
209
219
|
|
|
@@ -281,6 +291,8 @@ Each D3FEND technique below maps an offensive API-security finding to a defensiv
|
|
|
281
291
|
| D3-MFA | Multi-Factor Authentication (auth hardening at the API gateway) | Identity layer — phishing-resistant FIDO2 / WebAuthn passkeys for human-fronted APIs; service identities for machine-to-machine | Per-principal MFA enrolment; passkey-only for privileged routes | Every interactive authentication challenge is AiTM-resistant; TOTP / SMS insufficient for privileged API surfaces | Applies — AI-assisted phishing kits compress time-to-weaponise; passkey-mandatory for any human accessing AI-API management consoles (key rotation, budget setting) |
|
|
282
292
|
| D3-CBAN | Certificate-Based Authentication | Service-to-service and high-value gateway boundaries — mTLS per RFC 8446 with appropriate cipher choice | Per-service workload identity (SPIFFE/SPIRE-class); no shared service certificate | Workload identity verified at every hop; certificate revocation honoured (OCSP stapling / short-lived certificates per ACME) | Applies to MCP transport — mTLS at the gateway-to-MCP-server boundary; AI-API consumption via signed-and-attested workload identity where the AI provider supports it |
|
|
283
293
|
|
|
294
|
+
D3FEND technique IDs above resolve against `data/d3fend-catalog.json`; framework-gap rationales for each layer cross-walk to the matching entries in `data/framework-control-gaps.json` (notably `OWASP-ASVS-v5.0-V14`, `NIST-800-53-AC-2`, `NIST-800-218-SSDF`, `ISO-27001-2022-A.8.28`, `NIS2-Art21-incident-handling`, `UK-CAF-B2`, and `AU-Essential-8-App-Hardening`) so the defensive layer chosen for any finding can be cross-cited to both the offensive ATT&CK / ATLAS technique (`data/attack-techniques.json`, `data/atlas-ttps.json`) and the missing framework control in one operator pass.
|
|
295
|
+
|
|
284
296
|
---
|
|
285
297
|
|
|
286
298
|
## Hand-Off / Related Skills
|
|
@@ -280,6 +280,8 @@ Sequence remediation by RWEP descending, with live-patchable items inside RWEP t
|
|
|
280
280
|
|
|
281
281
|
## Output Format
|
|
282
282
|
|
|
283
|
+
The skill produces a Penetration Test Report covering scoped attack surface, engagement window, per-finding RWEP-prioritized severity, exploit-chain narrative, and prioritized remediation. The shape below is consumed downstream by `incident-response-playbook` (which scopes IR for any findings that crossed into production data), by `exploit-scoring` (which validates the per-finding RWEP score), and by `compliance-theater` (which compares the findings against the org's claimed control coverage). Preserve the per-finding evidence chain verbatim — it is the load-bearing field for client legal-review and any subsequent disclosure obligation.
|
|
284
|
+
|
|
283
285
|
```
|
|
284
286
|
## Penetration Test Report — [Engagement Name]
|
|
285
287
|
|
|
@@ -88,7 +88,7 @@ Cloud-IAM compromise has been the dominant cloud-breach root cause across all th
|
|
|
88
88
|
|
|
89
89
|
2. **2024-2025 AWS-key-in-public-repo crypto-mining campaigns.** Scraper bots monitoring the GitHub firehose monetise within ~5 minutes of public exposure. Typical spend pattern: 50-500 USD/hour of GPU instances in an unused region (where the victim has no resources to alert on regional anomalies). Common compromise window: 30 minutes to 4 hours before the victim notices. Even after revocation, the attacker often establishes long-lived persistence by creating their own IAM user with AdministratorAccess inside the compromised account before the original key is revoked.
|
|
90
90
|
|
|
91
|
-
3. **2026 Azure managed-identity token replay (
|
|
91
|
+
3. **2026 Azure managed-identity token replay (design-class issue, not a single CVE).** Attackers with limited code-execution on an Azure VM (often via SSRF in a hosted web application) steal the managed-identity token from the IMDS endpoint at 169.254.169.254. The token is valid for its TTL (default 24h on most managed-identity scopes) and can be replayed from the attacker's infrastructure. Azure Continuous Access Evaluation is the long-term mitigation; rollout is incomplete in most large estates.
|
|
92
92
|
|
|
93
93
|
4. **Scattered Spider AWS-MFA-bypass via help-desk social engineering.** Continuous 2023-2026 pattern. Voice-cloned or socially-engineered help-desk agent resets MFA on a privileged user, attacker logs in, escalates via either (a) creating their own IAM user with AdministratorAccess for persistence, (b) directly assuming a privileged role into a production account, or (c) modifying the federated IdP trust policy to grant ongoing access. Help-desk OOB-callback policy + voice-channel deepfake-resistant verification is the operational mitigation; coverage is fragmentary.
|
|
94
94
|
|
|
@@ -258,6 +258,8 @@ For each jurisdiction the operator is exposed to (US / EU / UK / AU / JP / SG /
|
|
|
258
258
|
|
|
259
259
|
## Output Format
|
|
260
260
|
|
|
261
|
+
The skill produces a Cloud Security Posture Assessment covering per-cloud (AWS / Azure / GCP / OCI / Alibaba) CIS Benchmark coverage, CSA CCM v4 control mapping, IAM least-privilege posture, IMDS / SSRF / metadata-service hardening, KMS / HSM key-management, and the prioritized remediation roadmap. The shape below is consumed downstream by `cloud-iam-incident` (which scopes IR with the IAM-finding list), by `container-runtime-security` (for workload-tier issues), and by `compliance-theater` (which compares the per-cloud control coverage against FedRAMP / IRAP / C5 / ENS / ISMAP claims). Preserve the per-control CIS Benchmark rows verbatim — they are the auditable evidence chain.
|
|
262
|
+
|
|
261
263
|
Produce this structure verbatim:
|
|
262
264
|
|
|
263
265
|
```
|