Neues aus der Waschbärhöhle

Patrick’s Blog über Android, Apps und alles was sonst noch so dazu gehört. Kann Spuren von Erdnüssen enthalten. Feedback ist willkommen, Abo auf eigene Gefahr!
Monday, April 19, 2021

Dafuq?! Ich hatte ja schon aufgehört mir das SMS TAN Verfahren bei Luca anzuschauen, nachdem klar wurde, dass das smoke & mirrors ist und man sich ne eigene App basteln kann, in der man das einfach weglässt. Und jetzt kursiert im Netz dieses geile Fundstück (Code aus der Originalversion):

package de.culture4life.luca.ui.registration;

// [..]
public class RegistrationViewModel extends BaseViewModel {

// [..]
  public boolean isUsingTestingCredentials() {
        return Objects.equals(firstName.getValue(), "John")
                && Objects.equals(lastName.getValue(), "Doe")
                && Objects.equals(phoneNumber.getValue(), "+4900000000000")
                && Objects.equals(email.getValue(), "john.doe@gmail.com");
    }

// [..]

    boolean isValidPhoneNumber(String phoneNumberString) {
        if (isUsingTestingCredentials()) {
            return true;
        }
        try {
            Phonenumber.PhoneNumber phoneNumber = phoneNumberUtil.parse(phoneNumberString, GERMAN_REGION_CODE);
            return phoneNumberUtil.isValidNumber(phoneNumber);
        } catch (NumberParseException e) {
            return false;
        }
    }

// [..]
}

Ja herzlichen Glückwunsch! Die Produktivversion mit Debugcode ausgeliefert. Das muss man erstmal schaffen. Und dieser Frickelbude sollen wir allen ernstes den technischen Unterbau für eine nationale Öffnungsstrategie anvertrauen? Ich glaub mein Schwein pfeift!

Der Bug da oben erlaubt es euch zwar nicht euch als “Darth Vader”, aber zumindest als “John Doe” ins virtuelle Luca Gästebuch einzuchecken und solange eure Telefonnummer +4900000000000 lautet braucht ihr auch keine TAN.

Anmerkung: Das ist ein Bug, kein konzeptioneller Fehler und daher leicht zu beheben. Aber es reiht sich eben auch nahtlos in eine (viel zu) lange Liste von Stümpereien ein.

Sunday, April 18, 2021

Nein zu Luca - aber wie erklär ichs Oma?

Eine kleiner Argumentationsleitfaden.

Seid vorsichtig, wenn ihr die Luca App umgehen wollt!

Ich lese hier gerade viel Nonsense und Halbwissen in Bezug auf die Luca App und einige gutgemeinte, aber dumme Vorschläge, wie man sich wehren könnte.

Friday, April 16, 2021

Liebenswert. Grad bemerkt, dass culture4life die URL ihres Sicherheitskonzepts ohne HTTP Weiterleitung geändert hat. Super! Jetzt kann ich erstmal alle Links fixen. Die Erklärung, warum der Pfad jetzt /securityoverview statt /securityconcept heißt würde ich echt gerne hören.

Und dabei hat von Anfang an irgendwas in mir geschrien: nicht verlinken, mach PDF Sicherkeitskopien.

Ich komm nicht darüber hinweg, dass man mit Luca auch private Treffen tracken kann. Das große Problem von Luca ist, dass man mit der App nur Teilnahme an Veranstaltungen überwachen kann, nicht aber die Wege dazwischen. Das klassische Beispiel hier wäre die Anreise mit dem Zug zu einem Konzert. Niemand wird auf der Suche nach einer freien Toilette die Qr Codes aller Wagons scannen, die er durchquert. Damit kann man dann Luca nicht mehr als Ersatz, sondern nur noch als Ergänzung zur Corona Warn App bewerben.

Aber wenn man Luca als Ergänzung zur CWA sieht, dann macht die Überwachung privater Treffen keinen Sinn mehr, denn hier funktioniert letztere zuverlässiger, da sie ohne Nutzerinteraktion auskommt. Wozu dann also überhaupt noch die Funktion für private Treffen integrieren? Die einzige Erklärung die mir plausibel erscheint ist, dass das lediglich ein Marketingtrick ist, der in erster Linie darauf abzielt, per Gruppenzwang die Nutzer zu gewinnen.

Hier scrollt gerade die Frage an mir vorbei, warum man bei Luca nicht einfach von QR Codes auf NFC Tags wechselt, die man dann nicht mehr einfach so abfotografieren und auf social media teilen kann. Berechtigte Frage!

Die Antwort lautet, dass NFC Tags sind, genau wie QR Codes, nur ein passiver, read-only Datenträger sind. Das ändert nichts an der grundsätzlichen Kopierbarkeit der Checkin Daten. Man kann diese dann zwar nicht mehr so leicht (und schon gar nicht versehentlich) als Bild in den sozialen Netzwerken teilen, aber das war auch nie das Problem. Mit einem Umstieg von von QR Code auf NFC Tag produzieren wir also lediglich Elektroschrott statt Plastikmüll. Am darunter liegendem Datenmüll ändert sich dadurch nichts.

Thursday, April 15, 2021

Sagt mal, jetzt, wo wir mit unseren “Öffnungsstrategien” ja auch wirklich alles dafür tun, um COVID-19 möglichst effektiv zu verschleppen und als Resultat noch lange FFP2 Masken in der Öffentlichkeit tragen werden müssen, können wir nicht vielleicht langsam auch mal über die ganzen Überwachungskameras reden, die überall aus Compliancegründen herumhängen?

So ein Vorher-Nachher Vergleich, ob die Dinger tatsächlich irgendeinen signifikanten Beitrag zur Aufklärung von Verbrechen leisten würde mich schonmal brennend interessieren.

Wednesday, April 14, 2021

Zur Einordnung der 10k Abhängigkeiten im Luca Backend (für nicht Techniker):

In jeder Programmiersprache ist es üblich, auf bereits Vorhandenem aufzubauen und Abhängigkeiten automatisch über einen Packetmanager reinzuziehen. Es ist auch üblich, dass Abhängigkeiten selber Abhängigkeiten haben. Aber: als Entwickler ist man normalerweise grundsätzlich bemüht, so wenig externen Code wie möglich einzubinden, weil man für den genauso wie für den eigenen, die Hand ins Feuer legen muss. Und damit haben wir dann zwei Probleme:

  1. Die 10k Abhängigkeiten stammen halt auch von 10k Entwicklern, die man nicht kennt und deren Arbeit man im blindem Vertrauen importiert.
  2. Wie war das nochmal gleich mit dem geklautem Code in der App? Sollen wir mal nachschauen, ob es da irgendwo eine transitive Abhängigkeit gibt, die Lizenzprobleme verursacht?

Man muss an der Stelle einfach mal verstehen, das Luca drauf und dran ist (war?), eine Pflichtapp in Deutschland zu werden, an der das öffentliche Leben hängen soll. So, und jetzt überlegt euch halt mal, dass die “russische Hacker” zwischen den Wahlen (die sie angeblich ständig manipulieren) vielleicht Langeweile haben könnten und sich sagen: ach komm, heute fahren wir mal Deutschland runter. Just for fun. Alles was sie dafür (theoretisch) tun müssen, ist eine der 10k Abhängigkeiten zu übernehmen. Macht euch an der Stelle nichts vor, die meisten von denen sind kleine Projekte, an denen kein Herzblut hängt. Wenn man dem Mainteiner nen Hunni bietet, ist der vermutlich froh, die Verantwortung abzugeben. Ab dem Punkt ist dann alles möglich, von der Störung des Betriebs, bis zur kompletten Übernahme des Luca Servers.

Also das Luca Backend ist ja auch echt ein Träumchen: Docker und Node.js - was man will man mehr?

Docker ist das Tool, der Wahl, wenn man Komplexität mal so richtig mit noch mehr Komplexität erschlagen will und das Thema “Betriebssystemsicherheit” an jemanden anderen delegieren möchte, der sich hoffentlich (besser) damit auskennt. Node.js ist für Leute, die einen Webbrowser für das Betriebssystem (man beachte die Redundanz zu Docker) und JavaScript für eine Programmiersprache für Erwachsene halten.

Tja, wer Node.js sagt, der muss auch Dependency Management sagen und in dem Ökosystem ist es gang und gäbe, bloß nichts selbst zu schreiben und jedes Fitzelchen Code von irgendwo anders rein zu ziehen. Javascript ist halt Murx und bevor man’s selbst falsch macht, nimmt man lieber das, was irgendwer anders vielleicht schonmal richtig gemacht hat und hofft darauf, dass er sein Projekt immer noch pflegt und niemals an böse Jungs verkaufen wird.

Ein schnelles

grep -r "resolved \"https://registry.yarnpkg.com" | sort | uniq | wc -l

Fördert jedenfalls schon mal 9641 externe Packetabhängigkeiten zutage. Sportlich!

(Natürlich sind das nicht alles direkte, sondern größtenteils transitive Abhängigkeiten, aber das macht die Sache ja auch nicht besser, oder?)

Ohai! Der Luca backend code ist ja doch noch aufgetaucht. Hätte ich jetzt nicht mehr mit gerechnet.

Grad mal fünf Minuten drin geblättert und was finde ich? Das Gesundheitsamt Frontend ist anscheinend (wie erwartet) eine Webapp. Schade, dass ich ohne Luca wohl aktuell nicht zu IKEA kann. Ich brauch dringend nen neuen Schreibtisch. Meiner hat mittlerweile zu viele Bissspuren in der Tischkante.

In Teil II hatten wir bereits gesehen, das Luca die Schlüssel der Gastgeber erzeugt/verwaltet. Jetzt sieht es so aus, als hätte Luca prinzipiell auch Zugriff auf die Schlüssel der Ämter.

Ja ne, ist klar. Was bitteschön soll dieser viel beworbene Crypt-Fu mit der “doppelten Verschlüsselung” eigentlich bezwecken, wenn ihr Schnarchnasen dann am Ende doch beide Schlüssel in der Tasche habt (bzw. haben könntet). An irgendeiner Stelle muss einem doch mal auffallen, dass man da was Grundsätzliches falsch macht, wenn man in die verschlossene Truhe in der einen, den Schlüsselbund in der anderen Hand hält und dann dem Nutzer sagt: “Vertrau mir, ich schau da nicht rein!”

Herzallerliebst ist übrigens auch, dass Luca die Mitarbeiter der Gesundheitsämter duzt.