[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Exim in Bullseye / "tainting" / "multiaccount"



Jürgen Ströhmann <juergen.stroehmann@t-online.de> (Di 20 Apr 2021 12:04:26 CEST):
> Multiaccount-Nutzung ?
> - Gibt es irgendwo einen Einstieg in die konkrete Bedeutung von "tainting" :-)))

Für kritische Operationen (vornehmlich wenn nicht sogar ausschließlich)
das Öffnen von Files (lsearch, dbm, …) dürfen für den Dateinamen keine
Expansionen (Variablen) verwendet werden, deren Inhalt zweifelhaft ist.


Ein typisches Beispiel:

    # Beispiel 1
    begin routers

        localuser:
            check_local_user
            transport = appendfile

    begin transports

        appendfile:
            driver = appendfile
            file = /var/mail/$local_part

Ein anderes Beispiel

    # Beispiel 2
    begin routers

        virtual_aliases:
            driver = redirect
            data = ${lookup{$local_part}lsearch{$config_dir/domains/$domain}}


In beiden Fällen werden $domain bzw. $local_part von außen durch den
Absender kontrolliert, und könnten *theoretisch* sowas wie
„../../../../etc/passwd“ enthalten. Mit etwas Phantasie läßt sich daraus
vielleicht was schönes basteln.

Deshalb werden in einer „aktuellen“ 4.94-Version diese o.g. Zeilen
nicht mehr funktionieren und mit einem „Tainted data while ...“ oder so
ähnlich abgebrochen.

#1 ist leicht behebbar, weil nach dem check_local_user automatisch
eine Variable $local_part_data mit einem geprüften Local Part enthält

              - file = /var/mail/$local_part
              + file = /var/mail/$local_part_data


Im zweiten Beipiel sieht die offizielle Lösung etwas anders aus:

        virtual_aliases:
                driver = redirect
              + domains = dsearch,ret=key;$config_dir/domains
              - data = ${lookup{$local_part}lsearch{$config_dir/domains/$domain}}
              + data = ${lookup{$local_part}lsearch{$config_dir/domains/$domain_data}}


Das alles ist jetzt aus dem Kopf aufgeschrieben, ohne Prüfung,
vielleicht ist es also auch falsch. Die aktuell zu 90% implementierte
Option „allow_insecure_tainted_data“ würde die ersten zwei Beispiele
weiterhin funktionieren lassen, aber um den Preis von Log-Meldungen.

    Best regards from Dresden/Germany
    Viele Grüße aus Dresden
    Heiko Schlittermann
--
 SCHLITTERMANN.de ---------------------------- internet & unix support -
 Heiko Schlittermann, Dipl.-Ing. (TU) - {fon,fax}: +49.351.802998{1,3} -
 gnupg encrypted messages are welcome --------------- key ID: F69376CE -

Attachment: signature.asc
Description: PGP signature


Reply to: