Leakvent 24: Telco-Dinge

Bis zum 39C3 öffne ich täglich ein Türchen zu den langweiligsten Datenlecks der letzten Jahre. Es geht um .git, .env, exponierte dev-Umgebungen und andere technisch langweilige Ursachen. Aber manchmal ist interessant, was sich hinter einem Türchen verbirgt. Alle Türchen sind hier zu finden.

Über die letzten Jahre hat sich eine kleine Sammlung technisch langweiliger Datenlecks im Telco-Ökosystem ergeben. Ursache dafür war (oder ist) eine Mischung von .git-Ordnern, .env-Dateien und Symfony Profilern. Belohnt wurde das Stöbern mit Beschäftigtendaten, Sim Inventories, Ausweiskopien und Hotline-Aufzeichnungen.

Deutsche Telekom

Schon Jahre her und relativ wenig Impact hatten drei Lecks bei der Telekom.

Unter https://gard.telekom.de/█/Dashboard.jspa wurde auf einen “GARD Webex Teams Ankündigungs-Chat” verwiesen. Dieser konnte über einen Kurzlink https://eurl.io/#████ betreten werden, auch ohne Telekom-Mitarbeiter zu sein. In dem dazugehörigen Webex-Chat waren Name, Fotos und E-Mail-Adressen von knapp 600 Beschäftigten zu sehen.

Unter https://█.de/.git/config war ein deploy token für gitlab.devops.telekom.de zu finden. Damit konnte aber nur dieses Repository gecloned werden. Der weitere Zugriff über die gitlab-API war eingeschränkt.

[core]
...
[remote "origin"]​
    url = https://gitlab+deploy-token:██████████​
		@gitlab.devops.telekom.de/██.git​
    fetch = +refs/heads/*:refs/remotes/origin/*​

Bei https://nwkr-intern.telekom.jobs waren dazugehörige env- und env.local-Dateien zu finden. Darin enthalten: API keys, SQL-Zugangsdaten sowie Zugangsdaten für die Webseite.

###> SF CONFIG ###​
SFOAPI_USER=██████​
SFOAPI_COMPANY=telekom█​█​
SFOAPI_PWD='██████████'​
NWKR_INTERNAL_LINK_BASE=https://nwkr-intern.telekom.jobs​
​
SF_SITE_OTE_PLUS_SA=██████████
SF_SITE_GERMANOS_SA=${SF_SITE_OTE_PLUS_SA}​
SF_SITE_OTE_AE=${SF_SITE_OTE_PLUS_SA}​
SF_SITE_COSMOTE_EVALUE=██████████​
SF_SITE_COSMOTE_AE=██████████​
...
DATABASE_URL=mysql://telekom:██████████@127.0.0.1:3306/telekom_hr_451​
###< doctrine/doctrine-bundle ###​

Lycamobile

Lycamobile ist ein MVNO, der in fast 20 Ländern aktiv ist und mehr als 15 Millionen Kund*innen versorgt. Unter verschiedenen IP-Adressen waren und sind git-Repositories zugänglich, die offenbar zu Lycamobile gehören.

[core]​
...
[remote "origin"]​
    url = http://newgit.ldinternal.com/lycadev/
                                  newsinglecode-lyca-uk.git​
    fetch = +refs/heads/*:refs/remotes/origin/*​

In diesen Repositories gibt es eine Mischung interessanter Dateien,

aus_prod_db.sql​, backupspain04-04-18.sql​, composer.json​, composer.lock​, composer.phar​, contributing.md​, db_spain_new.sql​, denmark_db.sql​, index.php​, license.txt​, lyca_gdpr.sql​, new_australia_db.sql​, new_denmark_db3.sql​, new_denmark_db4.sql​, readme.rst​, smartfocusemail.sql​, spain_prod_db.sql​, system​, uk_prod_db1.sql​, uk_prod_db2.sql​, uk_prod_db.sql​​,

und git branches:

ADD_SFMC_IN_UK_STAGE​, lmde-postpaid-platform​, master​, plat-prod-de​, 2Oprod​, 2oApisGERPROD​, 2oSpain​, 2oUKPROD​, 2oapiProd​, 2oprodmove​, ADD_ESIM_IN_GERMANY_PROD​, FreeSimGermStage​, UK_LATEST_STAGE​, UK_NEW_ENTITY_FOR_MOBILE​, UK_PLATFORM_LATEST_STAGE​, UKstage_ipaddress​, Uk_loyalty_changes​, ValidationPROD​, add-fields-rates​, add_organization_name​, de-preprod-mobile​, de_platform​, delete_api​, lycaprod_germany​.

Eine der Dateien enthielt einen gültigen API key für Complycube, einem Dienst für KYC und identity verification. Damit konnte u.a. auf Bilder von Ausweisen zugegriffen werden.

Ein argentinischer Ausweis, der aus der Complycube-API gefallen ist

Auf diverse Nachrichten über verschiedene Kanäle hat Lycamobile bisher nicht angemessen reagiert. Wer sucht, findet leicht weitere git-Repositories.

Variatel

Variatel ist ein MVNO, deutlich kleiner als Lycamobile und nur in Deutschland tätig, im Netz der Deutschen Telekom. Unter http://█.█.█.█/.env leakte im März/April 2023 eine env-Datei. Diese Datei enthielt Zugangsdaten für einen Datenbank-Server:

DB_CONNECTION=pgsql
DB_HOST=127.0.0.1
DB_PORT=5432
DB_DATABASE=variateldb
DB_USERNAME=████████
DB_PASSWORD=████████

Dieser Datenbank-Server war unter stagebkend.variatel.de im Internet zu erreichen. Die gleichen Zugangsdaten wurden im Produktivsystem unter ec2-█.eu-central-1.compute.amazonaws.com genutzt. Auch dieser Datenbank-Server war einfach so zu erreichen.

Was tut dieser Server am Internet?
Neben Namen, Adressen und natürlich Telefonnummern, gab die Datenbank auch IMSI, PINs und PUKs her

Über diesen Zugang konnte mittels pg_read_file eine aktuellere env-Datei ausgelesen werden. Diese enthielt einen gültigen API key für mobbeel, einem Dienst für KYC und identity verification.

MOBB_SCAN_AGENT_URL=https://mobbscan-cloud.mobbeel.com/mobbscan-agent
ALTEN_API_USERNAME=variatel-api
ALTEN_API_PASSWORD=████████

Damit konnte u.a. auf Bilder von Ausweisen aus ca. 13.000 Verifizierungsvorgängen zugegriffen werden.

Ältere Verifizierungsvorgänge waren nachvollziehbar
Erst schlägt die Verifikation fehl
Sobald Vor- und Nachname zum Dokument passen, klappt es doch

Außerdem konnte auf Call Data Records zugegriffen werden.

SFTP_HOST=██.██.██.██
SFTP_USERNAME=████████
SFTP_PASSWORD=████████
SFTP_PRIVATE_KEY=████████
Wer, wann, wie lange, mit wem. All das geht aus den Call Data Records hervor

Weiterhin gab es eine Datenbank readme_to_recover mit einem Hinweis darauf, dass Daten von dem Server kopiert wurden.

Vor uns war jemand anderes auf diesem Server gewesen

Auf mehrere Meldungen hat Variatel nicht geantwortet. Unter http://stagebkend.variatel.de/.git/ wird der Quellcode der Anwendung weiterhin zur Verfügung gestellt.

[remote "origin"]​
    url = https://github.com/cognitude-dev/variatel-be.git​
    fetch = +refs/heads/*:refs/remotes/origin/*​

TKD Solutions

TKD bietet Device as a Service an. Auch hier war 2024 ein git-Repository abrufbar.

[core]​
...
[remote "origin"]​
    url = https://██████████████@dev.azure.com/TKDSolutions/​
	                                      ████Auftragsliste​
    fetch = +refs/heads/*:refs/remotes/origin/*​

Ein Skript war anfällig für eine SQL-Injection. Passwörter wurden mit dem veralteten Hashverfahren md5 und ohne Salt gespeichert. Sie bestanden oft aus dem ersten Buchstaben des Vornamens und dem Nachnamen.

Diese Zugangsdaten erlaubten den Zugriff auf ein Portal zur Auftragserfassung, ein zweiter Faktor wurde beim Login nicht verlangt. In dem Portal konnten u.a. Stammdaten von Nutzer*innen und Kund*innen, Rufnummern und SIM-Seriennummern eingesehen werden.

git-Repository, SQL-Injection, md5 und Mangel an 2FA erleichtern den Zugriff auf das System zur Auftragserfassung

Handystar / Mobilezone

Mobilezone betreibt den Teleshopping-Sender Handystar. Auch hier war 2024 ein git-Repository abrufbar.

[init]​
...
[core]​
...
[remote "origin"]​
    url = https://gitlab-ci-token:████████████​
		@gitlab.com/████/abwicklungssystem.git​
    fetch = +refs/heads/*:refs/remotes/origin/*​

Ein Skript war anfällig für eine SQL-Injection. Passwörter wurden mit dem veralteten Hashverfahren md5 und ohne Salt gespeichert. Das Passwort eines Nutzers konnte in wenigen Sekunden wiederhergestellt werden.

Diese Zugangsdaten erlaubten den Zugriff auf ein Portal zur Bestellabwicklung, ein zweiter Faktor wurde beim Login nicht verlangt. In dem Portal konnten u.a. Stammdaten von Kund*innen eingesehen und Aufzeichnungen der Bestell-Hotline abgehört werden.

git-Repository, SQL-Injection, md5 und Mangel an 2FA erleichtern den Zugriff auf das System zur Bestellabwicklung
Daten von Kund*innen wurden erwartet
Aufzeichnungen von Anrufen bei der Hotline wurden nicht erwartet
Für mehrere Tage waren Aufgrund technischer Probleme nur Online-Bestellungen möglich

Das Unternehmen beauftragte eine größere Kanzlei zu prüfen, ob Betroffene benachrichtigt werden müssen: “Eine Benachrichtigung der betroffenen Personen gem. Art. 34 DSGVO ist nach unserer Auffassung nicht erforderlich.”

esim.me / TelcoVillage

TelcoVillage vertreibt unter anderen “Hardware-eSIMs” ‒ SIM-Karten, die ältere Geräte eSIM-fähig machen. Auch hier war 2025 ein git-Repository abrufbar.

[core]​
...
[remote "origin"]​
    url = https://██@bitbucket.telcovillage.com/██.git​
    fetch = +refs/heads/*:refs/remotes/origin/*​

In dem Repository waren viele php-Dateien zu finden,

… index03052018.php​, index0.php​, index1.php​, index20171031.php​, index20180122.php​, index2.php​, index_ajax.php​, indexBkp.php​, indexGD.php​, index_good_22052018.php​, indexGood.php​, index_no_ajax.php​, index.php​, …

Manche der Dateien enthielten gültige root-SSH-Zugänge.

<?php​
...
if (!($resource=@ssh2_connect("█.█.█.█",22))) {​
  echo "[FAILED]<br />";​
  exit(1);​
}​
...
if (!@ssh2_auth_password($resource,"root","█████████████")) {​
  echo "[FAILED]<br />";​
  exit(1);​
}​
...

Das ging unerwartet schnell.

WEtell / amiva

Unter https://teststage.wetell.de/_profiler/ war 2024 ein Symfony Profiler offen zugänglich erreichbar. Über diesen konnten u.a. Formulareingaben mit Zugangsdaten im Klartext sowie Konfigurationsdaten eingesehen werden.

Per Suche nach method: POST und URL: anmelden filtern wir nach interessanten Logs
Interessante Logs beinhalten Zugangsdaten im Klartext

Diese Zugangsdaten erlaubten den nicht-administrativen Zugriff auf die Portale http://teststage.wetell.de/ bzw. http://teststage.amiva.de/.

“Meine Verträge” zeigten anderswo auch eSIM-QR-Codes

ReiseSIM / TravelFon

TravelFon vertreibt unter ReiseSIM SIM-Karten und eSIMs. Auch hier war 2025 ein git-Repository abrufbar.

[core]​
...
[remote "origin"]​
  url = ssh://gogs@gitlab.travelfon.eu██/██reisesim.de.git​
  fetch = +refs/heads/*:refs/remotes/origin/*​

In dem Repository waren viele php-Dateien zu finden. Eine der Dateien enthielt gültige Zugangsdaten für eine Airalo-API. Airalo ist ein großer eSIM-Händler. Damit konnten u.a. vergangene eSIM-Bestellungen einschließlich QR-Code abgerufen werden.

<?php​
…​
$clientid = '537███████████████';​
$clientsecret = '███████████’;​
$api = 'https://partners-api.airalo.com/’; ​
$accesstoken = '█████████████████’;​
…​