Leakvent 7: Vino24, Rindchens Weinkontor und Staatsweingut Freiburg

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.

Gleich drei Mal waren 2023 Daten von Wein-Käufer*innen ziemlich offen zugänglich. Die Ursache war in jedem Fall ein Symfony Profiler. Über diesen können u.a. Zugangsdaten im Klartext sowie Konfigurationsdaten eingesehen werden.

Beim Staatsweingut Freiburg konnte man sich damit beim SQL-Server einloggen und auf Daten von etwa 9.400 Kund*innen zugreifen.

Bei Rindchens Weinkontor lagen die Zugangsdaten eines Administrators. Damit konnten in der Testumgebung Daten von etwa 50.000 und in der Produktivumgebung Daten von mehr als 60.000 Kund*innen eingesehen werden.

Bei Vino24 sieht es ähnlich aus, dort waren Daten von knapp 250.000 Kund*innen zugänglich.

Leakvent 6: Der Bundesgerichtshof

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.

Im Januar 2024 meldeten wir eine SQL Injection in den Entscheidungsdatenbanken von Bundesgerichtshof und Bundespatentgericht. Die Lücke wurde wahrscheinlich geschlossen, bestand aber im August 2025 wieder.

Ein Parameter des Login-Formulars (BGH, andere Gerichte analog) war anfällig für eine Time-based SQL Injection. Darüber konnte auf mehrere Datenbanken zugegriffen werden. Passwörter der Nutzer*innen wurden lediglich mit dem veralteten md5-Hashverfahren gehasht und konnten wiederhergestellt werden.

Damit konnte auf den internen Bereich der Entscheidungsdatenbanken zugegriffen werden, ohne die SQL Injection zu bemühen. So hätten Entscheidungen verändert, gelöscht oder auch neu erstellt werden können.

Außerdem erlaubt eine Funktion des Portals das Auflisten von Inhalten von server-seitigen Verzeichnissen, bspw. /etc/. Durch das Verändern von URL-Parametern konnte das Parsing von PDF-Dateien beeinflusst werden. Es wurde aber nicht versucht, eine Shell hochzuladen.

Leakvent 5: Vevor

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 viele Monate waren 2022 bei dem Baumarkt-Temu Vevor über die Zeit immer mehr und schließlich fast 800 Gigabyte Logs einsehbar. Ein Elasticsearch erlaubte unter wechselnden IP-Adressen bei AWS anonymen Zugang.

Indices: 309, document count: 1496535116, size: 797.9 GB
Found index goods-2022.11.10 with 37131622 documents (13.4 GB)
Found index risk-2022.11.08 with 579851 documents (216.2 MB)
Found index risk-2022.11.09 with 562293 documents (207.3 MB)
Found index goods-2022.11.11 with 40573566 documents (14.7 GB)
Found index goods-2022.11.12 with 37160357 documents (12.1 GB)
Found index goods-2022.11.13 with 34469876 documents (11.9 GB)
Found index risk-2022.11.07 with 598158 documents (224.6 MB)
Found index vevor-pc-2022.11.08 with 68842 documents (53.3 MB)
Found index vevor-pc-2022.11.07 with 78280 documents (60.3 MB)
Found index vevor-pc-2022.11.09 with 75443 documents (57.0 MB)
Found index .opendistro-reports-instances with 0 documents (208 B)
Found index data-gateway-lua-access-2022.11.05 with 4604008 documents (1.4 GB)
Found index email-marketing-2022.11.13 with 306537 documents (334.7 MB)
...

Einzelne Einträge zeigen bspw, wer was wohin bestellt hat.

[INFO]2022-07-1202:30:01.789[DubboServerHandler-10.20.29.145:20992-thread-6]INFOc.v.pay.channel.util.ApiCallUtils-[62ccdca8e4b01fd5208ea9e7]ApiCallUtil.callPaypalresponse:TOKEN=EC-0461416764794954C&
BILLINGAGREEMENTACCEPTEDSTATUS=0&
CHECKOUTSTATUS=PaymentActionNotInitiated&
TIMESTAMP=2022-07-12T02:30:01Z&
...
SHIPTONAME=##VORNAME## ##NACHNAME## &
SHIPTOSTREET=##STRASSE##&
SHIPTOSTREET2=##STRASSE##&
SHIPTOCITY=Hamburg&
SHIPTOSTATE=Hamburg&
SHIPTOZIP=21029&
SHIPTOCOUNTRYCODE=DE&
SHIPTOPHONENUM=*&
SHIPTOCOUNTRYNAME=Germany&
ADDRESSSTATUS=Confirmed&
CURRENCYCODE=EUR&
AMT=56.99&
...
L_NAME0=4L Wasser Destilliergerät Wasserfilter Wasserdestillier Innenteil aus Edelstahl&
...

Auch die Bayerische Datenschutzbehörde wurde informiert. Ob diese tätig wurde oder Betroffene von Vevor informiert wurden, ist unklar. Klar ist aber, dass auch andere die Daten gefunden haben: {"@timestamp": "2099-11-15T13:12:00", "message": "All indexs has been dropped. But we backup all indexs. The only method of recoveribing database is to pay 0.021 BTC. Transfer to this BTC address 14UCEfQG5vs7kZAbFrcZ7K4BCiEa48mdFu . You can buy bitcoin here, does not take much time to buy https://localbitcoins.com or https://buy.moonpay.io/ . After paying write to me in the mail with your DB IP: recmydata@onionmail.org and you will receive a link to download your database dump.\n"}

Leakvent 4: Plenar TV Niedersachsen

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.

  1. Unter https://landtag-niedersachsen-tv.im-en.com/.git/ befand sich 2021 ein git-Repository. Dort lag Quellcode des Plenar-TV:

./config/config.php
./connect.php
./index2dash_ohneredner.php
./index2dash.php
./index2.php
./index.php
./modules/cms.php
./modules/cutVideo.php
./modules/onlineCutterDash.php
./modules/onlineCutter.php
./modules/test.php
./Mustache/Autoloader.php

  1. In der Datei connect.php sind gültige mysql-Zugangsdaten enthalten.
    $con=mysqli_connect("127.0.0.1","landtag-hannover",█████████████,"█████████████");
  2. Unter https://landtag-niedersachsen-tv.im-en.com/.gitignore befand sich ein Hinweis auf den Pfad https://landtag-niedersachsen-tv.im-en.com/voddb/. Dort lag ein phpMyAdmin. So konnten die mysql-Zugangsdaten genutzt werden, obwohl der mysql-Server selbst nicht direkt von außen erreichbar war.

Leakvent 3: Emma Matratze

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.

Unter http://www.admin.emma-matratze.de/ leakte ein git-Repository, das neben Quellcode auch gültige Zugangsdaten enthielt:

==> cron/██████████.php <==
<?php
require_once '██████.php';
// todo put to system configuration

$hostname = '{imap-mail.outlook.com:993/ssl}MC';
$username = '██████@bettzeit.com';
$password = '██████████████';

Das Kontaktformular unter https://www.emma-matratze.de/kontakt/ hat meine Meldung blockiert: “Sorry, you have been blocked
You are unable to access emma-matratze.de
“, auch meine E-Mail wurde offenbar ignoriert. Die Zugangsdaten sind nach mehr als drei Jahren noch immer gültig.

Leakvent 2: Die Partei

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.

Weiter geht es mit der Partei Die Partei. Die Entwicklungsumgebung eines Webshops für Parteibedarf mit aktiviertem Symfony Profiler war 2022 offen zugänglich.

The profiler is a powerful development tool that gives detailed information about the execution of any request.

Never enable the profiler in production environments as it will lead to major security vulnerabilities in your project.

Über diesen Profiler konnten u.a. Konfigurationsdaten (“mysql://dev:████████@localhost:3306/dev”) sowie personenbezogene Daten von Bestellenden (Name, Adresse, E-Mail-Adresse) abgerufen werden. Die Daten reichten ein Jahr zurück und umfassten augenscheinlich nicht nur Testdaten.

Leakvent 1: Ferrari Academy

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.

Es geht los mit der Ferrari Academy. Betroffen waren 2022 nicht besonders viele Menschen. Dafür gab es .git und .env mit Zugangsdaten, eine exponierte dev-Umgebung sowie directory listings und herunterladbare Backups von php-Dateien.

  1. Unter https://academy.ferrari.com/ waren directory listings aktiviert. So konnte u.a. unter https://academy.ferrari.com/<redacted>/HubSync/users.csv eine csv-Datei mit personenbezogenen Daten (u.a. Ausweisnummer) gefunden werden.
  2. “Backups” von php-Dateien erlaubten den Zugriff auf Quellcode, bspw. https://academy.ferrari.com/<redacted>/class.ilCompetence.php.backPrimadiAPOS. Im Quellcode sind auch Zugangsdaten zu finden.

$mail->Username = ‘AKIA████████████████’;
$mail->Password = ‘████████████████████’;

#$mail->addCustomHeader(‘X-SES-CONFIGURATION-SET’,’ConfigSet’);
$mail->Host = ’email-smtp.eu-west-1.amazonaws.com’;
$mail->Port = 465;

  1. Unter https://<redacted>/.env lag eine Datei mit Umgebungsvariablen.

APP_NAME=Laravel
APP_ENV=local

DB_CONNECTION=mysql
DB_HOST=█████████
DB_PORT=3306
DB_DATABASE=█████████
DB_USERNAME=█████████
DB_PASSWORD=█████████

DB_HOST2=█████████
DB_DATABASE2=lmsdb_prod
DB_USERNAME2=█████████
DB_PASSWORD2=█████████

ACADEMYURL=“http://dev.academy.ferrari.com”

  1. Unter https://<redacted>/lms-ferrari/.git/ und https://<redacted>/fixitproject/.git/ lagen zwei git-Repositories mit Quellcode, Konfiguration und personenbezogenen Daten.

Wifi without internet on a Marabu flight

Just as james vaughan, I spent a recent flight finding out what I could do with a connection to the flight’s wifi, but without access to the internet. After reading james’ blogpost, I decided to share my story ‒ I found more data 🙂

I was on my way to Greece, a direct flight from Hamburg to Lefkada. It’s a long flight. Marabu’s wifi is not for browsing the Internet but for accessing the inflight entertainment system only. I was bored, did not like the movie selection, so I opened up my browser’s network dev tools to see if I could figure out what was going on.

Citing james,

I used my browser’s “Copy as cURL” feature to quickly get a command to hit the endpoint. As an aside, this feature is present in Firefox and all chromium-based browsers and it’s really handy if you ever need to reply requests made by your browser and want to send all the same headers.

The information the API returned in the beginning were not too interesting. I cannot provide an example response from one of those first requests. If I remember correctly, the responses showed only data that drives the inflight wifi portal’s flight status screen, showing our plane’s location, air speed, etc.

However, since this was one of the few things I could access on this network, I decided to make the most of it. The following API endpoint is what caught my eye: https://marabu.everhub.aero/monitor/status?path=/system/net/.

„Wifi without internet on a Marabu flight“ weiterlesen

Schutzranzen

Am 22.01.2018 hat Digitalcourage einen Artikel über das Tracking von Kindern und Schulranzen veröffentlicht. Dies haben wir zum Anlass genommen, die Schutzranzen-App der Coodriver GmbH einmal näher anzuschauen. Nach kurzer Suche sind wir auf eine API gestoßen, über die sie unter anderem IMEIs, Telefonnummern oder Zeitstempel der letzten bekannten Positionen abrufen konnten. Laut Coodriver GmbH war der ausgenutzte API-Endpunkt nur zu Testzwecken aktiv.

Details

Zuerst wurde mit Packet Capture der Datenverkehr der Schutzranzen-App mitgeschnitten. Dadurch konnten die URL einer API und dazugehörige HTTP Basic Auth Zugangsdaten in Erfahrung gebracht werden.

Anschließend wurde die apk mit apktool entpackt und nach Schlagwörtern wie http oder api gesucht. So wurden 14 verschiedene Funktionen identifiziert, die die API über HTTP GET oder PUT zur Verfügung stellte.

Eine dieser Funktionen lieferte eine Liste aller registrierten Tracker curl 'https://<http basic auth Zugangsdaten>@<URL der API>/.../trackers'. Die Liste enthielt für jeden Tracker die IMEI, die Telefonnummer, einen Namen (“… Test …”), den Zeitstempel des letzten Positionsupdates und den Zeitstempel der letzten Aktivität, den Batteriestatus (niedrig oder nicht), sowie eine Flag, ob der Tracker Eltern akzeptiert.

Für Regionen sectors?latitude=%.6f&longitude=%.6f&radius=%d konnte abgefragt werden, welche Tracker sich in diesem Sektor befinden. Durch einen sehr großen Radius, etwa radius=900000000, konnten Daten zu fast 100 Trackern abgerufen werden.

      {
         "id":"<IMEI>",
         "phone":"<TELEFONNR>",
         "name":"Test Internal 7",
         "lastSeen":1515187629000,
         "lastPositionUpdate":1515187634000,
         "visible":false,
         "acceptingParents":true,
         "batteryLow":false
      },

Mit den IMEIs der Tracker und über eine andere Funktion der API konnten die Eltern, die einem Tracker zugeordnet waren, abgerufen werden. Die Antwort der API enthielt mehrere IDs und einen Namen.

  {
      "tracking":true,
      "name":"Papa",
      "server":"<API>",
      "slot":"UNKNOWN",
      "primaryId":5,
      "appId":"12345-1234-1234-1234-12345678"
   },

Hier gibt es eine Stellungnahme von Coodriver zur gefundenen Lücke. heise online berichtete über die Einstellung des Projekts.

Disclosure Timeline

  • 22.01.2018
    • Telefonat mit Coodriver
    • Technische Details der Lücke per E-Mail an Coodriver gesendet
    • Nachfrage per E-Mail von Coodriver zu weiteren Details
    • Telefonat mit Coodriver zu weiteren Details
  • 23.01.2018
  • 06.02.2018
    • Nachfrage, ob Lücke geschlossen wurde, da für Ende Januar eine neue Version angekündigt worden war
    • Coodriver teilt mit, dass die neue Version voraussichtlich Ende Februar erscheinen wird
  • 22.02.2018
    • Nachfrage, ob die Lücke geschlossen wurde, da die API-Zugangsdaten nicht mehr funktionieren
    • Coodriver teilt mit, dass die Lücke noch nicht dauerhaft geschlossen wurde
  • 05.03.2018
  • 06.03.2018
    • Coodriver teilt mit, dass die Lücke geschlossen wurde und die Ortungsfunktion entfernt wurde