SECURITY.md

April 27, 2026 Β· View on GitHub

Hack23 Logo

πŸ›‘οΈ EU Parliament Monitor β€” Security Policy

Vulnerability disclosure Β· Severity SLAs Β· Compliance posture Β· Accepted risks
πŸ” Responsible disclosure Β· 🚨 48h ack Β· βš–οΈ ISO 27001 / NIS2 / EU CRA aligned Β· 🀝 Coordinated public credit

Owner Version Classification Review Cycle Effective

Report Security Advisory Email security@hack23.com Hack23 ISMS

OpenSSF Scorecard OpenSSF Best Practices SLSA 3 CodeQL Scorecards

πŸ“‹ Document Owner: CEO | πŸ“„ Version: 1.1 | πŸ“… Last Updated: 2026-04-27 (UTC) πŸ”„ Review Cycle: Quarterly | ⏰ Next Review: 2026-07-27 | 🏷️ Classification: Public


🎯 Purpose & Scope

This Security Policy documents how to report vulnerabilities in the EU Parliament Monitor platform, the severity-based remediation SLAs we commit to, the compliance frameworks we align with, and the accepted residual risks we explicitly carry. It is the public face of the broader SECURITY_ARCHITECTURE.md and operates under the Hack23 ISMS Vulnerability Management Policy.

πŸ”— Sister policies: SECURITY_ARCHITECTURE.md (C4 controls + threat model) Β· THREAT_MODEL.md (STRIDE for software-security context) Β· CRA-ASSESSMENT.md (EU Cyber Resilience Act conformity) Β· CLASSIFICATION.md (CIA triad + BCP impact bands).


πŸ“¦ Supported Versions

This project is under active development. Security updates are provided for the latest released version only. Always upgrade to the most recent release for security fixes.

🏷️ VersionπŸ›‘οΈ SupportedπŸ“… EOL
latest (main)βœ… Activeβ€”
Older releases❌ End of lifeUpgrade required

🚨 Reporting a Vulnerability

We take the security of the EU Parliament Monitor project seriously. If you discover a potential vulnerability, please report it privately so we can assess and remediate before public disclosure.

🎯 What constitutes a vulnerability

CategoryExamples
πŸ’‰ InjectionXSS, HTML injection, Markdown-it sanitization bypass
πŸ” Auth/AuthzOIDC misconfiguration, GitHub Actions secret leakage
πŸ“¦ Supply chainInsecure dependencies, compromised vendored bundle (Mermaid/Chart.js/D3)
πŸ”“ Data exposureSensitive data exposure, GDPR boundary violation
βš™οΈ MisconfigurationInsecure defaults, CSP bypass, S3/CloudFront exposure
βœ‹ ValidationInsufficient input validation in MCP payload handling

πŸ› οΈ How to privately report (preferred β€” GitHub Security Advisory)

  1. Visit github.com/Hack23/euparliamentmonitor
  2. Click the Security tab β†’ Advisories β†’ Report a vulnerability
  3. Fill in: description, reproduction steps, potential impact, suggested mitigation
  4. Submit β€” maintainers are notified privately and you become a collaborator on the advisory

βœ‰οΈ Alternative reporting

ChannelAddressUse when
πŸ”’ GitHub AdvisoryReport hereDefault β€” preferred
πŸ“§ Emailsecurity@hack23.comGitHub unavailable; subject line [SECURITY] EU Parliament Monitor β€” <brief description>

⏱️ Disclosure Timeline & Severity SLAs

Upon receipt of a vulnerability report:

PhaseTargetAction
πŸ”΅ Acknowledge≀ 48 hoursConfirm receipt and assign internal handler
🟑 Validate≀ 7 daysReproduce, classify CVSS severity, assign CVE if applicable
🟒 RemediatePer SLA belowDevelop, test, and release patch or mitigation
🟣 PublishAfter patchCoordinated public advisory with reporter credit

🎚️ Severity-based remediation SLAs

Per the Hack23 ISMS Vulnerability Management Policy:

🚦 SeverityCVSS v3.1⏰ Remediation SLAπŸ“ Description
πŸ”΄ Critical9.0 – 10.07 daysImmediate threat, active exploitation possible
🟠 High7.0 – 8.930 daysSignificant security impact
🟑 Medium4.0 – 6.990 daysModerate security impact
🟒 Low0.1 – 3.9Best effortMinimal security impact

πŸ§ͺ Security Testing

We employ multiple defence-in-depth layers, all wired into CI/CD:

πŸ”¬ LayerToolTrigger
πŸ› οΈ SASTCodeQLPush, PR, weekly schedule
πŸ“¦ SCADependabot + npm auditDaily, PR validation
βœ… Unit security testsVitest (β‰₯80% coverage)Every commit
🌐 DASTPlaywright + axe-core (accessibility-as-security)PR + nightly
πŸ† Supply chainOpenSSF Scorecard + SLSA L3 attestationsWeekly + on release
πŸ“œ License complianceREUSEPush, PR, weekly

πŸ“Š See SECURITY_ARCHITECTURE.md Β§ Security Testing for full coverage details.


🎯 Scope

βœ… In scope

  • πŸ“° News generation scripts (scripts/)
  • 🟒 Analysis-artifact aggregator (src/aggregator/** β€” artifact-order.ts, clean-artifact.ts, analysis-aggregator.ts, markdown-renderer.ts, article-html.ts, article-metadata.ts, article-generator.ts CLI)
  • 🧹 HTML sanitiser (src/utils/html-sanitize.ts) and the markdown-it render pipeline with explicit plugin allowlist (markdown-it-anchor, markdown-it-footnote, markdown-it-attrs, markdown-it-deflist)
  • πŸ”Œ MCP clients (src/mcp/** β€” European Parliament, IMF, World Bank) including the getVotingRecordsWithFallback() three-state fallback to the EP Open Data Portal
  • 🧠 Committed analysis artifacts under analysis/daily/** (attack surface for aggregator rendering)
  • 🎨 Vendored client-side diagram renderer (js/vendor/mermaid/ etc.) under strict script-src 'self' CSP
  • πŸ“„ HTML templates and rendered output (news/*.html, language variants)
  • πŸ€– GitHub Actions and gh-aw agentic workflows (.github/workflows/news-*.md β€” 8 unified news-<type>.md + news-translate.md)
  • ☁️ AWS S3 + CloudFront deployment pipeline (deploy-s3.yml, OIDC GithubWorkFlowRole)
  • πŸ“¦ Dependencies and supply chain (OpenSSF Scorecard + SLSA L3 provenance + SBOM)

❌ Out of scope

  • 🌐 Third-party services (GitHub, European Parliament APIs, IMF SDMX REST, World Bank Open Data)
  • πŸ—οΈ Infrastructure (AWS account-level, GitHub Pages hosting as fallback runbook)
  • πŸ–₯️ Client-side browser vulnerabilities not under platform control

πŸ† Recognition & Anonymity

ChannelWhat you get
πŸ“‹ Release notesReporter credit (with consent)
πŸ“œ Security advisoryPublic acknowledgment in the GHSA
🌟 Public GitHub recognitionCredit on the advisory page (unless anonymity requested)
πŸ… Security Hall of FameRepeat or high-impact contributors considered

We respect anonymity requests β€” opt out at any point in the disclosure flow.


πŸ“ Compliance Frameworks

EU Parliament Monitor aligns with the following frameworks. Evidence is traceable through ISMS-PUBLIC, the SECURITY_ARCHITECTURE compliance matrix, and the CRA-ASSESSMENT conformity table.

πŸ›οΈ FrameworkπŸ“Œ ScopeπŸ“‚ Evidence
ISO 27001:2022Information security managementSECURITY_ARCHITECTURE Β§ Compliance Matrix
NIST CSF 2.0Identify Β· Protect Β· Detect Β· Respond Β· RecoverSECURITY_ARCHITECTURE Β§ NIST CSF
CIS Controls v8.118 critical security controlsCodeQL, Dependabot, npm audit, SBOM
GDPRData minimisation, purpose limitationEP open data only, no profiling
NIS2Article 20–21 cybersecurity risk managementTHREAT_MODEL.md (STRIDE software context)
EU Cyber Resilience ActSBOM, vulnerability disclosure, Annex I/VCRA-ASSESSMENT.md, SLSA provenance
OWASP Top 10Web-app security best practicesSame-origin CSP, sanitised rendering

πŸ“Š Security Metrics (live posture)

MetricTargetCurrent
🟒 Known vulnerabilities (npm audit)0 production0 (2 documented dev-only accepted risks β€” see below)
🟒 Code coverage with security testsβ‰₯ 80 % line82 %+
🟒 Dependency-scanning coverage100 %100 %
🟒 CodeQL critical/high findings00
🟒 OpenSSF Scorecardβ‰₯ 7.0Live score
🟒 SLSA build levelL3Attestations

πŸ“ˆ See SECURITY_ARCHITECTURE.md Β§ Security Metrics for trend data.

🟑 Accepted Risks (documented dev-only false positives)

The following advisories are detected by npm audit and explicitly allow-listed in .github/workflows/test-and-report.yml (Security Check job). Both are dev-only and do not reach end-user runtime:

πŸ†” GHSAπŸ“¦ Package🚦 SeverityπŸ“‚ PathπŸ“ Justification
GHSA-2g4f-4pwh-qvx6ajv (via ESLint)🟑 Moderate (ReDoS)devDepESLint does not invoke ajv with the $data option; only triggered on attacker-controlled JSON schemas, which we never feed it. Resolves with the ESLint 10 upgrade.
GHSA-w5hq-g745-h8pquuid <14.0.0 (via mermaid)🟑 Moderate (buffer bounds)devDepmermaid is a build-time-only dependency. Library is vendored to js/vendor/mermaid/ and renders diagrams from analyst-authored Markdown that has passed the Stage-C completeness gate; user input never reaches uuid.v3/v5/v6 with an attacker-controlled buf argument. The site is fully static β€” no server-side mermaid execution.

⚠️ Drift guard: if npm audit reports any GHSA outside this list, the Security Check job MUST fail. Allow-listing requires a pull request that updates this table and the workflow allow-list together.


πŸ“š Security Resources

ResourceLink
πŸ›‘οΈ Threat modelSECURITY_ARCHITECTURE Β§ Threat Model
πŸ” Security controlsSECURITY_ARCHITECTURE Β§ Security Controls
πŸš’ Incident responseHack23 ISMS Incident Response Plan
πŸ› Vulnerability managementHack23 ISMS Vulnerability Management
πŸ›οΈ Information security policyHack23 ISMS Information Security Policy
πŸ› οΈ Secure development policyHack23 ISMS Secure Development Policy
πŸ” Threat modelling policyHack23 ISMS Threat Modeling
πŸ“‹ Classification frameworkHack23 ISMS Classification
βš–οΈ EU CRA conformity assessmentCRA-ASSESSMENT.md

🌐 Hack23 Ecosystem

EU Parliament Monitor is part of the broader Hack23 civic-tech and security portfolio:

πŸ›οΈ Project🎯 FocusπŸ”— Link
🌐 Hack23 HomepageOrganisation site, ISMS hubhack23.com · Hack23/homepage
πŸ“œ ISMS-PUBLICPublic ISO 27001 / NIST CSF / CIS / GDPR / NIS2 / EU CRA policiesHack23/ISMS-PUBLIC
πŸ”Œ European Parliament MCP ServerTypeScript MCP server with 60+ EP open-data toolsHack23/European-Parliament-MCP-Server
πŸ‡ΈπŸ‡ͺ Riksdag MonitorSwedish Parliament monitor (sister project)Hack23/riksdagsmonitor
πŸ•΅οΈ CIASwedish Parliament intelligence platform (Java/Spring)Hack23/cia
βœ… CIA Compliance ManagerCIA-triad compliance dashboard (TypeScript)Hack23/cia-compliance-manager
πŸ₯‹ Black TrigramKorean martial-arts game with security focusHack23/blacktrigram

πŸ“ž Contact

ChannelUse for
πŸ”’ GitHub Security AdvisoryVulnerabilities (preferred)
βœ‰οΈ security@hack23.comVulnerabilities (alternative)
πŸ› GitHub IssuesNon-security bugs and feature requests
πŸ’¬ GitHub DiscussionsQ&A, design discussions
πŸ“§ info@hack23.comGeneral inquiries
🀝 conduct@hack23.comCode of Conduct concerns

πŸ™ Thank you for helping us keep EU Parliament Monitor and its users safe. Your contributions to our security posture are deeply appreciated.

Maintained by Hack23 AB β€” Intelligence Operations Team under the Hack23 ISMS framework.