De PingCAP TiDB Cloud-lekken - FulcrumSec

Overzicht van de buit

  • Totale exfiltratie: 10,6 TB
  • Aantal bestanden: 4.901.203
  • Control plane: 88 opeenvolgende exports om de zes uur van de productie-omgeving, ongedetecteerd
  • Cloud storage: ~50 GCP storage buckets
  • Data warehouse: Een BigQuery-warehouse met 533,8 miljoen rijen
  • Organisaties: 180.046 tenant-organisaties
  • E-mailadressen: 403.262 unieke e-mails
  • API-sleutels: 115.308 plaintext customer API-sleutels (waarvan 42.612 actief)
  • SQL-statements: 20.645.574 SQL-statements van klanten
  • Verbindingen: 102.003.766 gateway-verbindingen
  • IP-adressen: 5.036.738 server-IP's van klanten
  • Tickets: 377.446 Jira-issues
  • Contacten: 433.928 CRM-contacten
  • Kostenoverzichten: 92 GB aan tenant-gelabelde AWS-kostengegevens
  • Broncode: 413 private source repositories

Vandaag maken we het datalek van PingCAP openbaar. Wij zijn in het bezit van de volledige TiDB Cloud control plane, de billing- en finance-omgeving, de GCP storage-omgeving, de AWS-kosten- en billing-omgeving, Jira, CRM, analytics, de broncode en een logboek van vier jaar waarin elke verbinding die elke klant ooit met het product heeft gemaakt is vastgelegd, inclusief de IP-adressen van hun applicatieservers.

PingCAP verkoopt TiDB Cloud, de beheerde versie van de open-source TiDB-database. Banken, gamestudio's en e-commerceplatforms vertrouwen hun productie-workloads toe aan PingCAP. PingCAP beheert de clusters in een gedeeld multi-tenant platform, en hun volledige businessmodel rust op de claim dat dit veilig en beveiligd is. De rest van dit artikel is het bewijs dat dit niet het geval is.

Ten eerste lijkt het erop dat ze nul zicht hebben op hun eigen clouddiensten. Dit is helaas standaard bij bedrijven die we hacken: ze investeren miljoenen in fancy EDR-systemen, maar laten honderden S3-buckets ongezien wegvloeien. Maar dit is een cloudprovider. Het is verschrikkelijk en uiterst onverantwoord om blijkbaar niet in staat te zijn massale, onsubtiele compromittering en exfiltratie van elk van hun clouddiensten te detecteren: AWS, GCP, Atlassian / Jira en Azure.

We hebben bijna twee maanden lang doorgegaan met de exfiltratie, waarbij we regelmatig aanvullingen deden na de initiële exfiltratie van circa 8 terabyte. We hebben zelfs een replicatiefeed opgezet van hun eigen control-plane database met behulp van credentials die in hun eigen repositories waren gecommit — GCP service-account keys en een Azure service principal — en lieten hun eigen infrastructuur de data naar ons verzenden.

Elke zes uur, gedurende de laatste tweeëntwintig dagen van de campagne (van 8 september tot 30 september), exporteerde deze pipeline trouw elke tabel van het operationele hart van TiDB Cloud: tenants, gebruikers, API-sleutels, cluster-credentials, changefeeds en migraties. Achtentachtig opeenvolgende exports, zonder dat er één detectie-event plaatsvond. De laatste export vond plaats op 30 september om 06:02 UTC. De control-plane data die hieruit voortkwam, bevindt zich in de eerste release.

Wat we hebben meegenomen

De Control Plane

De metadb is volledig gerepliceerd: 180.046 tenant-organisaties, 292.276 gebruikersrecords (waaronder 166.108 echte namen), 403.262 unieke e-mails, 388.861 projecten, 3.448.054 serverless clusters, 16.299 dedicated clusters en 115.308 console API-keypairs opgeslagen in plaintext (waarvan 42.612 actief; de nieuwste werd aangemaakt op 30 september om 04:46, enkele uren voordat we de kraan dichtdraaiden). Daarnaast 1.809 externe database-endpoints van klantmigraties — root- en admin-accounts op MySQL/Aurora hosts van klanten — plus 290 AWS-account ID's van klanten en 85 GCP-project ID's uit VPC-peering records.

SQL-statements van klanten

20.645.574 ruwe SQL-statements onderschept uit de SQL Editor en Chat2Query. Dit bevat applicatieschema's, tabelontwerpen en bedrijfslogica van duizenden tenants, gecategoriseerd op organisatie, project en cluster-ID. Eén statement maakt bijvoorbeeld een tabel aan van medische professionals (usuario, nombre_usuario, contrasena); een ander voegt de patiëntenlijst van een Braziliaanse kliniek in. Dit is de inhoud van klantdatabases, vastgelegd door het product zelf en verzonden via de pipeline van PingCAP.

De Target Map

De gateway access logs fungeren als de adreslijst van de geïnstalleerde basis van een databasebedrijf: het verbindingsvolume van elke klant, hun app-server IP-adressen, hun client-programma's (o.a. Rails 0.46M verbindingen, ProxySQL, MySQL Workbench, langgenius/dify) en hun cluster-ID's. Iedereen die verdere toegang tot TiDB Cloud-klanten plant, begint hier. Alle 23.651 dagelijkse bestanden zitten in 09gatewaylogs.tar.gz.

De financiën

Het CUR-corpus met resourcetagsusertenant maakt de kosten per klant inzichtelijk via een spreadsheet-join: 57 maanden aan AWS-uitgaven voor een totaal van $107.195.238,42, EDP-korting van −$10.362.705,51 en private tarieven van −$8.829,018,11 (~47% korting op de lijstprijs). Alleen al de cross-AZ transfer in us-east-1 kostte $16.509.714,87. Gecombineerd met de finance-DB snapshots (netto kosten per tenant, monthlycloudorder, de AR-tabel, dbaasbilling met 8,8 miljoen rijen) en de ARR writer-logs, is de brutomarge van TiDB Cloud per benoemde klant en productfamilie simpelweg een SQL-query.

Het commerciële boek

  • HubSpot: 433.928 contacten, 191.187 bedrijven, deals met een nominale waarde van $552M (o.a. Wetech $74,7M, PayPay $45,2M, Atlassian $25,8M, SBI $20,2M, AEON $10,7M, TOPPAN $9,7M).
  • Stripe: Alle 8.428 betalende tenants in live-modus, waarvan 8.301 tenant-ID's gekoppeld aan Stripe-accounts.
  • NetSuite: Omzetregisters voor 584 benoemde klanten.
  • AWS Marketplace: 861 stratadressen van kopers, 48.991 abonnementsovereenkomsten.
  • China-register: 12.262 rijen voor omzetverantwoording voor een totaal van ¥353,1M, met klanten als Bank of China, het Ministerie van Wetenschap en Technologie en China Life.

De broncode

413 repositories. Hieronder:

  • De billing-engine die ongeverifieerde X-ACCOUNT-USER-ID headers vertrouwt.
  • De account-service waar admin een tenant-ID is en impersonatie de organisatiecontroles omzeilt met de owner-rol.
  • De gedeelde crypto-library pkgv2: AES-CBC met de IV afgeleid van de key prefix — een statische IV — geïnstantieerd met één server-wide SaltSecret. Elk versleuteld wachtwoord van een downstream-database van een klant in het platform is daarmee slechts één config-secret verwijderd van plaintext.

De Identity Graph

  • 13.620.173 GA4 apparaat-identificatoren over 108.871.828 events.
  • De cloud_users crosswalk (290.458 rijen) die gehashte gebruikers-ID's koppelt aan e-mails en employer tenant-ID's.
  • 2.895.030 rijen die ingelogde identiteiten koppelen aan cookie-sporen.
  • Mixpanel-exports met 3.552 volledige benoemde profielen.
  • 24.932 persoonlijke e-mails met LinkedIn- en GitHub-profielen uit de reo.dev developer-intelligence graph die PingCAP heeft aangekocht — waaronder de meest actieve engineers van Tencent (3.327), Huawei (2.726) en ByteDance (2.475), gerangschikt op hun neiging tot aankoop.

Klanten in de registers

De tenant-ID's zijn niet anoniem. Het eigen ops-auditspoor van PingCAP koppelt ze als volgt:

KlantTenant ID / Detail
Booking.comtenant 1372813089189081313
Shopeetenant 1372813089191241283
CAPCOM CO., LTDtenant 1372813089188871292, TiDB v6.1.1, ap-northeast-1
Colopltenant 1326455380288475136, TiDB v6.1.0
TOPPAN INC.prod-1372813089204501289, aws-ap-northeast-1
Catalyst Softwareprod-1372813089188151289, aws-us-east-1
SB Payment Serviceprod-1372813089206331321, aws-ap-northeast-1

Daarnaast staan in dezelfde tabel met 42 organisaties en het billing-woordenboek met 94 vermeldingen (geleverd in de eda_service repository): Mercari, PayPay, Fujitsu, SoftBank, DMM, AEON, Square Enix, Konami, BANDAI NAMCO, Delhivery, Flipkart, Quincus, Nylas, Airbnb, Pinterest, Databricks, bitget, Pionex, DigiPlus, NFTscan, Baidu, SES-imagotag, Persona, Transsion, ZOZO, gumi, iret, Classmethod, Wetech, Atlassian, Cygames, SBI, LINE, Chainbase, PatSnap. Hun VPC CIDR's, cluster-versies en endpoint-hostnames zijn inbegrepen; voor de ongelukkigen die gegevens in support-tickets hebben geplakt, zijn ook de credentials aanwezig.

De waarschuwing stond al in Jira

Het security-team van PingCAP had in 2022 exact beschreven wat er mis was met de multi-tenant isolatie van hun eigen product. Ticket SECURITY-22 uit de interne security-tracker luidt in hun eigen woorden:

Samenvatting: "Het root-wachtwoord van het cluster kan onvoorwaardelijk worden gereset"
"Alle rollen van de organisatie (inclusief: owner, audit admin, billing admin, member) kunnen onvoorwaardelijk het root-wachtwoord van alle clusters in de organisatie resetten. Dit zal ertoe leiden dat alle gebruikers in de organisatie het cluster root-wachtwoord resetten, waarna gebruikers als root verbinding kunnen maken met het cluster, de clusterstatus kunnen wijzigen en toegang kunnen krijgen tot clusterdata."
"Omdat het root-account van het cluster extreem hoge privileges heeft, leidt dit tot een groot beveiligingsrisico."

Vier jaar voordat wij binnendrongen, had hun eigen security-team gedocumenteerd dat elk lid van een klantorganisatie — inclusief een rol die alleen voor billing is — elk cluster in die organisatie als root kon overnemen. Het ticket dateert uit augustus 2022. De breach liep tot september 2026. Voor een databasebedrijf is dit stuitend.

De 'Support Operation' als motor voor cross-tenant lekken

PingCAP-engineers plakken productie-credentials van klanten in Jira-tickets. De drie ergste logs zijn volledig opgenomen in de release (02customercredentiallogs), en de tickets zelf staan in 05jira_issues:

  • GTOC-5812 (01-02-2023): Bevat een commentaar in het ticket (op het moment van exfiltratie nog LIVE):

AWSACCESSKEYID=AKIAYM5Y2YXDRDJD2IOM AWSSECRETACCESSKEY=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 aws s3 ls s3://pingcap-logs-pinterest/

  • APID-11182 (02-05-2025): Bijlage 81543_tidb-log.txt, geplaatst door [email protected], binnen een TiDB BR backup-config regel (bucket:"cdx-crs-tidb-backup"):

AKIA2VMQLYWL3LJEHQFC : D7kJLJ2qIcdrjHrusWh5VTygW82hWN1ILirDosS7 ARN arn:aws:iam::733131556247:user/DEVOPS — AdministratorAccess + AmazonS3FullAccess over 258 buckets, waaronder cdx-exp-npci-vault-snapshot, cdx-dev-npci-los-loandoc, cdx-dev-pci-sftp, cdx-sit-npci-lgc-smarttax-cloudhsm, cdx-dev-crs-silverlake-misc-binaries. Geen van deze buckets behoorde toe aan PingCAP.

  • APID-12036: Een productie-slow-query log van een klant van 314 MB, toegevoegd aan een support-ticket (bijlage 106965). De UPDATE statements bevatten de credential store per gebruiker van de klant: 8.027 verschillende waarden — 7.485 AWS STS session key sets, 345 GitHub user-to-server tokens, 192 AI-platform API-sleutels (OpenAI, Anthropic, Gemini, ElevenLabs, xAI en OpenRouter), één AWS root key pair, en één GitHub personal access token met 24 administratieve scopes over 1.701 repositories (waarvan 843 privé). Dit betreft enkel credentials van andere bedrijven die nog steeds live zijn. Deze klanten zijn slachtoffer van de nalatigheid van PingCAP.
  • APID-11887: 1.825 verschillende productie-connection strings met ingebedde gebruikersnamen en wachtwoorden, waaronder:

mysql://3QqgLjKpGPJ9jgG.root:[email protected]:4000/6nyf9vDx56DJcbNfYFeWX6?ssl={"rejectUnauthorized":true}

  • TCID-2287:

mysql://redbulltestreplicatedtidb:[email protected]:3306/redbulltestreplicatedtidb.*

Daarnaast zijn er 38 presigned S3 URLs naar de bucket van één specifieke klant (debank-temp.s3.ap-northeast-1.amazonaws.com), geplaatst tussen 25-01-2024 en 02-02-2026 door dezelfde support-engineer.

Klanten vertrouwden PingCAP toe met de credentials die hun applicaties verbinden met het product. De tracker van PingCAP heeft deze vervolgens gedistribueerd naar iedereen die nu over deze data beschikt.

De marge per klant

De ARR writer-logs registreren elke maandelijkse schrijfactie per Salesforce-account (07arrsalesforce_logs):

  • write to salesforce success: {'MonthEndARRAmountc': '2931005.0', 'Accountc': '0015g000002hX2QAAU', 'RevenueMonthc': '2025-01-01', 'Product_Familyc': 'TiDB Enterprise Subscription'}
  • write to salesforce success: {'MonthEndARRAmountc': '2100000.0', 'Accountc': '0015g000002hX2SAAU', 'RevenueMonthc': '2025-01-01', 'Product_Familyc': 'TiDB Enterprise Subscription'}
  • write to salesforce success: {'MonthEndARRAmountc': '1137016.2', 'Accountc': '001BV000003Ra97YAC', 'RevenueMonthc': '2025-01-01', 'Product_Familyc': 'TiDB Enterprise Subscription'}

Het contract van Cygames staat in de finance fixtures met productiecijfers: tenant 1372813089191061283, order JP-OF-25030306, netto kosten $2.400.000, geaccumuleerde omzet $2.633.694,97. De maandelijkse netto kosten van PatSnap (UK) Ltd: $136.093,25. Bedrijfscuota voor cloud FY25: $29.438.510,37.

In de China CRM staat in een sales-activity note: 中国人寿,是已经签了商务合同的客户。转移到大客户线索池。 (China Life — een klant met een getekend commercieel contract. Overgeplaatst naar de enterprise lead pool.)

Klanten in de Identity Graph

De cloudusers crosswalk koppelt de pseudonieme analytics-laag aan echte personen: {"metadbuserid": "6150003", "ga4userid": "a97cedec6bee3080548ba9209a65f2ab44c6a44e123bdbf84e44c9b832f1f894", "tenantid": "1", "createdat": "2022-03-30 10:43:08 UTC", "updatedat": "2022-04-02 09:51:45 UTC", "useremail": "[email protected]", "useremaildomain": "pingcap.com", "userstatus": "active", "userfirstname": "Sophie", "userlastname": "Wang", "pseudo_users": [{}]}

Console-pagina URL's bevatten tenant-context: /clusters/10144798180725090481/sqleditor?orgId=1372813089209261904&projectId=1372813089454579595

De Mixpanel user.csv profieltabel toont:

  • [email protected] — Hong Kong, Happy Valley, laatst gezien 2022-08-11
  • [email protected] — Milpitas, US
  • [email protected] — Osaka, laatst gezien 2022-07-05

Toplanden: Japan (774), China (702), India (499), Hong Kong (416), Verenigde Staten (342). Werkgevers zijn zichtbaar in de e-maildomeinen: Klook, Colopl, Cygames, Booking.com, Mercari, Alibaba, Amazon.

De aangekochte reo.dev graph rangschikt ontwikkelaars van hun doelaccounts op aankoopbereidheid, inclusief zakelijke e-mails en LinkedIn-profielen: Tencent (3.327 actieve ontwikkelaars), Huawei (2.726), ByteDance (2.475), AIG (2.140); 712 benoemde kopers met hoge intentie bij Mastercard, Flipkart, bKash, Quark, Actian, eSewa.

Initiële Release

Van de 10,6 TB die we bezitten, bestaat de eerste release uit vijf tar.gz archieven — 128,3 GB gecomprimeerd, iets meer dan 200 GB ongecomprimeerd. Meer volgt binnenkort.

ArchiefGrootteInhoud
11curtenant_costs.tar.gz70,6 GiBAWS-kostengegevens toegeschreven aan tenants (2022–2026): 92 GB aan parquet-bestanden. Bevat kosten per klant, cluster, regio en component. Inclusief Athena-kostenanalyse corpus.
04_bigquery.tar.gz31,5 GiBVolledige BigQuery analytics omgeving: 83 datasets en 533,8M rijen. Inclusief metadb control-plane mirror, sqleditor view, cloudusers crosswalk, GA4 web analytics, Salesforce/NetSuite/HubSpot datasets, reo_dev graph en 401.911 regels transcripties van sales-calls.
10_repos.tar.gz17,2 GiB413 private repositories met volledige git-historie over vijf GitHub-organisaties (tidbcloud, pingcap-inc, pingcap, tidb-incubator, Sibyl-TiDB). Bevat de billing-engine, account/identity service, ops portal, shared crypto library, interne IT-platform en SRE audit repositories.
09gatewaylogs.tar.gz6,9 GiBVier jaar aan TiDB Cloud Data Gateway access logs: 23.651 dagelijkse bestanden (41 GB raw). 102.003.766 verbindingen over 846.527 klantclusters, 1.443.915 SQL-gebruikersnamen en 5.036.738 unieke client IP's.
pingcapleakpack_rest.tar.gz2,1 GiBAcht gecureerde collecties: 01decoderadmissions (SECURITY/HR trackers, configs, secrets), 02customercredentiallogs (support logs met credentials), 03customerbook (HubSpot, Stripe, AWS Marketplace, China CRM), 05jiraissues (alle 377.446 issues), 06financesnapshots (productie snapshots 2026-10-04), 07arrsalesforcelogs (maandelijkse ARR logs), 08firewatchchats (290 tenant-alert chat exports).
pingcap-stage-one.torrent128,3 GiBAlle vijf de archieven in één download.