Technical audit · 06.05.2026

kapo.ee

Internal Security Department

The website of a counterintelligence service, visited by informants, journalists, and people with sensitive data. Three American trackers are wired into the code and fire on every page navigation — but all are blocked by the CSP. No data got out. The only shield is a single line of security policy.

Request timeline

+220–235 ms · on load
Three trackers (GTM, IBM Instana, Cloudflare Insights) initiate requests on every navigation between pages. All return status 0 — blocked by the CSP.
Consent banner
Absent — and none is needed. Zero Set-Cookie, zero consent requests. There is nothing to ask about: no data is transmitted anywhere.
Session total
No data left anywhere. This is one of the cleanest results in this series in terms of actual data transfer. But the architecture is built with the trackers ready to run.

Declared versus actual

✓ Policy: data is not transferred to third parties (section 2.5) — declared
+ Google Tag Manager — GTM-5XSF9BX, wired into the code — not declared
+ IBM Instana — eum.instana.io, wired into the code — not declared
+ Cloudflare Insights — static.cloudflareinsights.com, wired into the code — not declared

Transfer timings

+220 ms eum.instana.io

IBM Instana — End User Monitoring (IBM Corporation, USA). Status 0

+221 ms static.cloudflareinsights.com

Cloudflare Insights — an analytics beacon. Status 0

+235 ms www.googletagmanager.com

Google Tag Manager, container GTM-5XSF9BX. Status 0

Detected trackers

Indicators of GDPR non-compliance

Context

Kaitsepolitseiamet (KaPo) is Estonia’s counterintelligence service: countering terrorism, protecting the constitutional order, countering foreign intelligence services. Informants, investigative journalists, and people with sensitive data about corruption and security threats come here. HAR from May 6, 2026: 167 requests, 5 domains.

What is done correctly — almost everything

All three external trackers are blocked by the CSP, all with status 0. There is no Google Fonts, no YouTube, no DoubleClick, no browser-update.org, no advertising networks. Zero Set-Cookie, zero consent requests — and none are needed, because there is nothing to ask about. In terms of actual data transfer, this is one of the cleanest results in the series: no data left anywhere.

What is wired into the code — and why it matters

All three trackers are blocked, but all three are wired into the site’s code — this is a fundamental distinction. The GTM container GTM-5XSF9BX, eum.instana.io (IBM Instana, performance monitoring from IBM, USA), and static.cloudflareinsights.com — three American services in the code of a counterintelligence agency’s site. The decision to integrate them was made. The CSP made a different decision — to block them. The requests fire in sync, eight times per session: +220 ms, +221 ms, +235 ms.

A contradiction with the policy

KaPo’s policy is written in detail and competently: it contains special grounds for restricting data subjects’ rights (julgeolekuasutuste seadus §21-1), which is justified for an intelligence service. But section 2.5 states that personal data is not disclosed or transferred to third parties, except where required by law. Meanwhile, GTM, IBM Instana, and Cloudflare Insights are wired into the code. If the CSP stopped working, data would flow to Google, IBM, and Cloudflare automatically on every visit — with no legal basis. The policy declares an absence of transfer; the code contains three tools for doing exactly that.

Conclusion

This is not a violation in the classic sense — no data got out. But it is a documented architectural vulnerability. The CSP is the only line of defense: if a developer updates the site and accidentally changes the security policy, all three trackers would start working instantly, because they are already wired in and waiting. On a commercial site, this is technical debt. On a counterintelligence agency’s site, it’s a systemic risk. Two opposing decisions coexist in the same code: “integrate” and “block.” For now, the second one wins. This time — it held. But trust is not architecture.

Evidence

How to verify: download the file and compute its checksum — sha256sum file.har (Linux, macOS) or certutil -hashfile file.har SHA256 (Windows); it must match the one shown. The conclusions apply to the scope of this measurement — see the limitations of the method.

Original (audit)
HAR file: ee/kapo-ee-2026-05-06.har
SHA-256: f324ba95f03267d5d233d2517bd2aa6de6fff16c5d4dedf123b3b3f07b3d70ef
Re-check snapshot
Awaiting changes
HAR files are stored on EU infrastructure (Proton Drive). SHA-256 is published for integrity verification.