Firefox 71: Layout via userChrome.css nachbessern

Wer gestern seinen Webbrowser geöffnet und u.a. meine Layoutanpassungen laufen hat, wird vermutlich einen grauen Block vorgefunden haben. Das lässt sich leicht lösen.

Firefox 71 – TabsToolBar anpassen

Wir brauchen einen Texteditor. Mit diesem öffnet Ihr die folgende Datei: ~/.mozilla/{profilname}/chrome/userChrome.css und ändert den #TabsToolbar Block in:

#TabsToolbar { /* tab bar */
    -moz-box-ordinal-group: 3 !important;
    padding-top: 0px !important;
    top: 92px;
    position: absolute;
    display: block;
}

Abspeichern. Browser neustarten. Geht wieder!

 

 

Neue Schwachstelle im Fedora Systemdesign?

Travis Ormandy, genau der vom Google Security Team, hat bei Red Hat und Fedora im April 2019 einen Securityreport eingebracht, daß eine Änderung zum Setzen von Bootflags, jetzt die Tendenz hat, extrem leicht dem Bootprozess zu stören.

SUID für grub2-set-bootflag

„grub2-set-bootflag“ ist ein Befehl aus der Bootloaderedition, der zwei Argumente annimmt. Aufrgund der Argumente verorte ich das mal im FastBootBereich des Systemstarts, weil es augenscheinlich um so Sachen wie schnelleres Laden, wenn Booten schon einmal erfolgreich war, geht.

Das Problem

$ ls -l `which grub2-set-bootflag`
-rwsr-xr-x. 1 root root 20272 Oct 10 00:35 /usr/sbin/grub2-set-bootflag

Wie man unschwer sehen kann, ist das ein Programm, daß man als User ausführen kann und dann Dinge als Root tut. Um genau zu sein, es schreibt eine Bootoption in die grubenv abhängig vom Argument. Ohne erst einmal ein halbes Dutzend Bugreports zu lesen, die grubenv enthält so Sachen wie „welchen Kernel soll ich booten“ und ist extrem anfälliger Bockmist.

Ja,Ja, ich hörs schon wieder, ich soll nicht so auf anderer Leute Arbeit rumhacken 🙂 Also erkläre ich das mal, dann verstummt Ihr von alleine 😉 Das ist Bockmist weil, die grubenv muß EXAKT 1024 Zeichen lang sein, um vom Bootloader verarbeitet werden zu können. Ist sie kleiner oder größer, wird sie ignoriert … und auch nie wieder beim Update der Bootconfig gefixt.

Woher ich das weiß, na von dem halben Dutzend Bugreports über die letzten Jahre, die Andere und ich zu dem Thema bei Red Hat abgesetzt haben und Ihr könnt mir glauben, die ziehen sich extrem unnötig in die Länge.

Immer mal wieder passiert es nämlich, daß grubby die grubenv selbst sabotiert. Unwissentlich passiert das, wenn jemand von Hand an der grubenv rumeditiert um z.b. einen anderen Kernel einzustellen. Macht das nicht! Nehmt Grubby dafür! Grubby: wie man wieder einen Default Kernel setzen kann

Um die exakte Dateilänge von 1024 zu erreichen, wird in die grubenv eine Reihe von abgezählten „#“ Padzeichen eingefügt. Könnt ja mal reinsehen. Wenn jetzt also jemand dort Optionen einbringt und der Grubenv-Block wird zu groß, oder zu klein, dann fällt das System auf die Defaults zurück.

Was im Zweifel bedeutet: Es bootet nicht mehr!

Welchen Grund wird es wohl gehabt haben, daß jemand einen anderen Kernel eingetragen hat? Genau 😉

Boot Loader Specification

Mit Fedora 30 wurde im Bootbereich auch Einiges geändert, so stehen die Kernels nicht mehr in der grub.conf drin, sondern finden sich jetzt in /boot/loader/entries/ als einzelne Dateien wieder und die saved_entry Variable in der grubenv referenziert nur noch einen dortigen Dateinamen.

Jetzt kommt Travis ins Spiel

Travis hat also aufmerksam die Publikationen von Fedora verfolgt und stolperte über das Problem mit dem Setuid. Damit kann nämlich jeder Benutzer, und damit Programm, diesen Grub2 Befehl ausführen. Würde das mit der grubenv stabil laufen, wäre das noch kein Problem.

Jetzt hat Travis aber einen Weg ersonnen, wie man als User die grubenv unbrauchbar machen kann, indem man z.b. das Padding zerstört ( siehe Bockmist oben ).

$ sudo egrep -bo ‚^##‘ /boot/grub2/grubenv
322:##

Zum Ermitteln wieviele ## da als Padding drin sind. Es geht aber auch pauschal mal eine 10 Byte lange Datei , kommt aufs gleiche raus.

python
Python 2.7.16 (default, Apr 30 2019, 15:54:43)
[GCC 9.0.1 20190312 (Red Hat 9.0.1-0.10)] on linux2
Type \“help\“, \“copyright\“, \“credits\“ or \“license\“ for more information.
>>> import resource
>>> import os
>>> resource.setrlimit(resource.RLIMIT_FSIZE, (323,323))
>>> os.execlp(\“grub2-set-bootflag\“, \“grub2-set-bootflag\“, \“menu_show_once\“)
Error flushing /boot/grub2/grubenv: File too large

Das Pythonbeispiel begrenzt also die Filelänge für sich und alle Subprozesse und Ihr ahnt es schon, das wirkt sich auch auf den per SUID aufgerufenen Prozess von Grub aus.

Ergebnis: Grubenv zerstört, Booteinstellungen auf Defaults zurückgesetzt und ggf. System damit unbrauchbar gemacht.

Und weil man das auch absichtlich zerstörerisch einsetzen kann, hat Travis das an Security@Redhat geschickt. Fedora und Red Hat haben es bis heute ignoriert. Heute lief der Full-Disclosure Timer aus, mal sehen ob jetzt was passiert.

Für Grubunzulänglichkeiten können Red Hat und Fedora natürlich nichts, aber man muß ja nicht noch Öl ins Feuer kippen. Vor F30 wurde es mit mit pkexec ausgeführt, was sich besser auf bestimmte Prozesse oder Benutzer einschränken läßt. Warum das geändert wurde bleibt in einer dunklen Developer-Mailingliste verborgen 😉

 

 

Firefox, die Fritz!Box & der SEC_ERROR_INADEQUATE_KEY_USAGE Fehler – Teil 2

Heute geht es um die Fortsetzung von Firefox, die Fritz!Box & der SEC_ERROR_INADEQUATE_KEY_USAGE Fehler. Kurzfassung: AVM ist ratlos, aber es gibt Hilfe.

Wie man das Zert der Box erneuert

Von AVM gibt es da leider keine Hilfe, also müssen wir selbst ran. Da ich das ganze Wochenende über mit dem Support gemailt habe, bestätigt sich mal wieder: Am besten man macht es komplett selbst 🙁

Kennt zufällig jemand einen Jail-Break für die Fritz!Box? Nein, dann bauen wir uns jetzt mal ein neues Zert:

Wie vom AVM Support zu hören war, gibt es neuerdings noch andere Domainnamen, daher wäre folgendes ratsam:

Ihr könnt entweder im Browser nachsehen, welche zusätzlichen Domainnamen das Zert enthält, oder Ihr ladet es aus der Box auf Euren PC -> „Zertifikat herunterladen“. Man erhält eine Datei namens „boxcert.cer“. Diese kann man nun mit OpenSSL aufschlüsseln lassen:

openssl x509 -text < boxcert.cer | grep -E „(CN |DNS)“

Beispiel:

Issuer: CN = fritz.box, O = PRIVAT, C = DE, ST = unkown, L = unkown
Subject: CN = fritz.box, O = PRIVAT, C = DE, ST = unkown, L = unkown
DNS:www.fritz.box, DNS:fritz.box, DNS:www.myfritz.box, DNS:myfritz.box, DNS:www.fritz.nas, DNS:fritz.nas

DISCLAIMER:

Das ist für RED HAT basierte Distributionen, bei Debian & Co sieht der Pfad zur openssl.cnf anders aus, falls Eure Distri überhaupt OpenSSL einsetzt. Ferner kann eure Box eine andere IP im LAN haben, als hier angegeben.  Bitte erst herausfinden oder einfach weglassen: (Achtung: Einzeiler!)

openssl req -x509 -nodes -sha256 -newkey rsa:4096 -keyout fritz.box.key -out fritz.box.crt -days 3650 -subj „/CN=fritz.box/O=PRIVAT/C=DE/ST=unkown/L=unkown/“ -reqexts SAN -extensions SAN -reqexts SAN -extensions SAN -config <(cat /etc/pki/tls/openssl.cnf <(printf „\n[SAN]\nsubjectAltName=DNS:www.fritz.box,DNS:fritz.box,DNS:www.myfritz.box,DNS:myfritz.box,DNS:www.fritz.nas,DNS:fritz.nas,IP:192.178.1.1„))

Hinweis: WordPress ist der Meinung doppelte Anführungszeichen in Zitatzeichen umzuwandeln, also nicht 1:1 in die Shell kopieren, das klappt nicht.

Nun haben wir ein Zwischenergebnis mit Key und Cert, brauchen aber noch die PEM für die Box, denn nur das Cert hochladen reicht natürlich nicht 😉

cat fritz.box.key > box.pem
cat fritz.box.crt >> box.pem

Jetzt kann man die „box.pem“ Datei über die oben sichtbare Uploadfunktion in die Box laden, diese verarbeitet es kurz und dann hat man schon sein Problem mit dem doppelten Schlüssel behoben.

Da es keine „Regenerieren“ Funktion gibt, bleibt einem da leider nicht viel anderes übrig. Featurerequest wurde übermittelt 😉