ODINT ← Albania Tour
← Back to Cyber Tours
🇦🇱 Albania • Parliament API • Critical Finding

Parliament Wide Open

Albanian Parliament unauthenticated OData API: 236 MPs’ full PII, 54,545 public documents, zero access controls. No credentials required.

CRITICAL — HIGH UNAUTHENTICATED API 54,545 DOCUMENTS 236 MP PII RECORDS

Summary

236MP PII Records
54,545Parliament Documents
7Open Endpoints
251 MBTotal Data Collected

The Albanian Parliament (parlament.al) serves a React SPA frontend backed by an ASP.NET OData API hosted on Azure. The API requires zero authentication. Any person on the internet can query the OData API at kuvendiapi.azurewebsites.net and retrieve full personally identifiable information for all 236 Members of Parliament, plus a catalog of 54,545 publicly accessible Azure Blob Storage documents.

Discovery Method

parlament.al returns HTTP 200 for all URL paths — a React SPA catch-all that initially appeared to be a dead end. Standard endpoint probing produced no results. However:

  1. The main React JS bundle was downloaded: main.[hash].js (355 KB minified)
  2. String extraction from the minified bundle revealed a hardcoded API base URL: https://kuvendiapi.azurewebsites.net/api
  3. Further analysis of minified webpack variable names extracted seven OData entity names: anetaret, strukturat, aktet, lajmet, mbledhjet, dokumentet, YouTube/search
  4. All seven endpoints responded to unauthenticated HTTP GET requests
  5. One additional endpoint (/abonimet) was probed and returned 401 — the only protected endpoint in the API

No authentication was bypassed. No exploits were used. The API was wide open by default.

Open API Endpoints

EndpointRecords / SizeContentStatus
/anetaret236 records / 138 KBMP records — full PIIOPEN
/strukturat274 KBParliamentary committeesOPEN
/aktet3.1 MBLegislative acts, interpellationsOPEN
/lajmet19.8 MBParliamentary news articlesOPEN
/mbledhjet2.2 MBSession and meeting recordsOPEN
/dokumentet54,545 URLs / 30.2 MBDocument catalog with direct Azure Blob URLsOPEN
/YouTube/search8 KBYouTube video search proxyOPEN
/abonimetSubscriptions401 (Protected)

MP PII Exposure — 236 Records

Each record in the /anetaret response contains the following fields for every Member of Parliament:

Additionally, a separate anetaret_active.json response filters to currently active MPs. An mp-email-list.txt of all 236 @parlament.al addresses was compiled from the API response (24 KB).

GET https://kuvendiapi.azurewebsites.net/api/anetaret
HTTP/1.1 200 OK
Content-Type: application/json; odata.metadata=minimal

{
  "Emri":       "[REDACTED]",
  "Atesia":     "[REDACTED]",
  "Mbiemri":    "[REDACTED]",
  "Datelindja": "1975-XX-XX",
  "Vendlindja": "Tiranë",
  "Email":      "[REDACTED]@parlament.al",
  "Partia":     "Partia Socialiste",
  "Zona":       "Tiranë",
  "Facebook":   "https://facebook.com/[REDACTED]",
  "Aktiv":      true
}

Azure Blob Storage — 54,545 Public Documents

The /dokumentet endpoint returns a 30.2 MB JSON catalog. Container listing on kuvendiwebfiles.blob.core.windows.net/webfiles/ is disabled — but all 54,545 blob URLs are enumerable via the API response, and individual blobs have public read access enabled. Direct URL construction from the catalog entries retrieves documents without authentication.

File TypeCount
PDF32,627
JPEG9,831
JPG8,458
JFIF1,768
DOCX885
DOC397
XLSX392
PNG208
XLS117

Key Documents Identified in the Catalog

372 of 392 XLSX spreadsheets were downloaded (44 MB), 837 of 885 DOCX documents were recovered (73 MB), and 25 priority PDFs/DOCs were downloaded (20 MB). Total Parliament-related data collected: approximately 237 MB.

Internal Reference

The parlament.al React JS bundle contains a hardcoded internal API reference:

http://134.0.63.165:5000/public

This is a private IP address unreachable from the public internet, confirming additional backend infrastructure beyond the Azure-hosted public API. The 134.0.x.x range is consistent with AKSHI’s own AS5576 network space (same range as e-albania.al at 134.0.39.39 and akshi.gov.al at 134.0.42.170).

Data Collected

FileSizeContent
anetaret.json138 KB236 MPs full PII
anetaret_active.json81 KBActive MPs only
strukturat.json274 KBParliamentary committees
aktet.json3.0 MBLegislative acts
lajmet.json19 MBNews articles
mbledhjet.json2.1 MBMeeting records
dokumentet.json29 MB54,545 document catalog URLs
youtube-search.json8.0 KBYouTube proxy results
mp-email-list.txt24 KB@parlament.al email directory
blob-docx-urls.txt141 KB885 DOCX blob URLs
blob-xlsx-urls.txt47 KB392 XLSX blob URLs
parlament-main.js355 KBReact bundle (API source)
parlament-vendor.js1015 KBReact vendor bundle
parlament-xlsx/ (372 files)44 MBMP salary and benefit spreadsheets
parlament-docx/ (837 files)73 MBParliamentary Word documents
parlament-docs/ (25 files)20 MBPriority PDFs and DOCs

Impact Assessment

Immediate impact: Full PII dossier on every Albanian Member of Parliament — a complete target package for social engineering, phishing, physical security threats, or political intelligence operations. The email directory alone provides a verified contact list for all 236 MPs.

Document exposure: Salary and benefits records for MPs covering 2018–2020, lobbyist registry, and four years of FOIA logs represent significant institutional transparency data — some of which may have been intended as non-public.

Systemic concern: The Parliament API has been on Azure since at least January 2022 (based on document timestamps). This exposure has persisted for at least four years. The API endpoint URL is hardcoded in a publicly served JavaScript bundle — it has been trivially discoverable by anyone who examined the frontend source during that period.

Methodology note: All data was collected via unauthenticated HTTP GET requests to publicly accessible API endpoints and Azure Blob Storage URLs. No authentication was bypassed. No credentials were tested. No access controls were circumvented. The API responded to standard requests without requiring any form of identification, token, or session cookie.

Research date: February 25, 2026 — ODINT Albania Investigation, Phase 2