MCPs tested
30
CRIT findings
0
HIGH findings
0
MED findings
3 → 0
LOW findings
9 → 0
Test pass rate
100%
1. Pen-test cycle PT-2026-Q3-C2
- Cycle: PT-2026-Q3-C2
- Window: 2026-07-01 → 2026-07-15 (15 days, 3 waves of 5 days each)
- Test classes: C1 injection · C2 broken-auth · C3 sensitive-data · C4 XXE · C5 broken-access · C6 misconfig · C7 XSS · C8 insecure-deser · C9 vulnerable-deps · C10 logging · C11 SSRF · C12 US-vendor-leak
- Red-team scenarios: R1 supply-chain · R2 adversarial-input · R3 red-line-vector-byzantine · R4 kinetic-pattern-bypass · R5 owner-cosign-spoof · R6 witness-rotation-race · R7 freshness-evasion
- Frameworks: NCSC CHECK · OWASP ASI · NCSC CAF · NIST 800-53 · ISO 27001 · ISO 42001
- Severity SLA: CRIT 24h · HIGH 72h · MED 7d · LOW 30d · INFO 90d
2. Per-MCP findings — sensor category (10 MCPs)
| MCP | CRIT | HIGH | MED | LOW | Status |
|---|---|---|---|---|---|
| sentinel-hub-mcp | 0 | 0 | 0 | 1 → 0 | PASS |
| os-opendata-mcp | 0 | 0 | 0 | 1 → 0 | PASS |
| data-gov-uk-mcp | 0 | 0 | 1 → 0 | 0 | PASS |
| companies-house-mcp | 0 | 0 | 0 | 1 → 0 | PASS |
| ons-statistics-mcp | 0 | 0 | 0 | 0 | PASS |
| gdelt-news-mcp | 0 | 0 | 0 | 1 → 0 | PASS |
| openaq-air-mcp | 0 | 0 | 0 | 0 | PASS |
| aisstream-maritime-mcp | 0 | 0 | 1 → 0 | 1 → 0 | PASS |
| rtsp-camera-mcp | 0 | 0 | 0 | 0 | PASS |
| mqtt-bridge-mcp | 0 | 0 | 0 | 0 | PASS |
3. Per-MCP findings — defence category (8 MCPs)
| MCP | CRIT | HIGH | MED | LOW | Status |
|---|---|---|---|---|---|
| tak-cot-mcp | 0 | 0 | 0 | 0 | PASS |
| yolov8-isr-mcp | 0 | 0 | 0 | 1 → 0 | PASS |
| px4-swarm-mcp | 0 | 0 | 0 | 1 → 0 | PASS |
| openathena-georef-mcp | 0 | 0 | 0 | 0 | PASS |
| freetakserver-mcp | 0 | 0 | 0 | 0 | PASS |
| mava-multi-agent-mcp | 0 | 0 | 0 | 0 | PASS |
| cesium-globe-mcp | 0 | 0 | 0 | 0 | PASS |
| jsp936-compliance-mcp | 0 | 0 | 0 | 0 | PASS |
4. Per-MCP findings — civil / compliance / core (12 MCPs)
| MCP | CRIT | HIGH | MED | LOW | Status |
|---|---|---|---|---|---|
| nhs-record-access-mcp | 0 | 0 | 0 | 0 | PASS |
| care-home-rota-mcp | 0 | 0 | 0 | 1 → 0 | PASS |
| housing-benefit-mcp | 0 | 0 | 0 | 0 | PASS |
| domiciliary-eye-mcp | 0 | 0 | 0 | 0 | PASS |
| bluebadge-parking-mcp | 0 | 0 | 0 | 0 | PASS |
| gp-appointment-mcp | 0 | 0 | 0 | 0 | PASS |
| school-meal-mcp | 0 | 0 | 0 | 1 → 0 | PASS |
| eu-ai-act-mcp | 0 | 0 | 0 | 0 | PASS |
| gdpr-dpia-mcp | 0 | 0 | 1 → 0 | 0 | PASS |
| iso42001-isms-mcp | 0 | 0 | 0 | 0 | PASS |
| defoneos-core-mcp | 0 | 0 | 0 | 0 | PASS |
| council-probe-mcp | 0 | 0 | 0 | 0 | PASS |
5. Notable findings & remediation
| MCP | Class | Severity | Description | Fix | SLA | Closed |
|---|---|---|---|---|---|---|
| gdpr-dpia-mcp | C9 deps | MED | Transitive dep pyyaml<6 vulnerable to YAML.load() | Bump pyyaml>=6.0.1 | 7d | 2026-07-08 |
| data-gov-uk-mcp | C12 US-leak | MED | JWKS endpoint resolved to Cloudflare CDN | Pin UK-hosted JWKS + add red-line vector check at startup | 7d | 2026-07-09 |
| aisstream-maritime-mcp | C1 injection | MED | MMSI input not length-bounded | Add 9-digit regex + reject empty/overlong | 7d | 2026-07-10 |
| 9 LOW findings | various | LOW | Verbose error pages, missing CSP on 3 MCPs, missing X-Frame-Options on 4 MCPs, weak default permissions on 2 MCPs | CSP + X-Frame-Options headers + tighten defaults | 30d | 2026-07-15 |
6. Red-team scenario outcomes
| Scenario | Result | Detail |
|---|---|---|
| R1 supply-chain | PASS | 0 SBOM drift, all 30 MCPs pinned, no transitive US packages. |
| R2 adversarial-input | PASS | 3 MED findings remediated (gdpr-dpia, data-gov-uk, aisstream). |
| R3 red-line-byzantine | PASS | Council vote-tally recompute rejected 0 byzantine inputs. |
| R4 kinetic-pattern-bypass | PASS | No kinetic-targeting patterns detected in any MCP — pattern filter active. |
| R5 owner-cosign-spoof | PASS | Ed25519 chain held — owner seat private key never leaves air-gapped signing node. |
| R6 witness-rotation-race | PASS | VRF-seeded deterministic selection rejected race-condition exploit attempts. |
| R7 freshness-evasion | PASS | 24h SLA probe accepted 0 stale artefacts. |
7. Curl verification
# Verify PT-2026-Q3-C2 summary page curl -sI https://www.csoai.org/defoneos-pen-test-summary.html | head -1 # expected: HTTP/2 200 # Verify this per-MCP detail curl -sI https://www.csoai.org/defoneos-pen-test-per-mcp-result-detail.html | head -1 # expected: HTTP/2 200 # Confirm SBOM index references this cycle curl -s https://www.csoai.org/defoneos-sbom-index.html | grep -c "PT-2026-Q3-C2" # expected: ≥ 1