Skip to content

Sicherheitslücke in SpamAssassin-Filtermodul

Betrifft uns zwar nicht:

Sicherheitslücke in SpamAssassin-Filtermodul

ist aber böse, wenn man sich einmal den Code anschaut:
sfsistat
mlfi_envrcpt(SMFICTX* ctx, char** envrcpt)
{
    // gekürzt

    char buf[1024];
    char *fmt="%s -bv \"%s\" 2>&1";

    // gekürzt

    snprintf(buf, sizeof(buf)-1, fmt, SENDMAIL, envrcpt[0]);

    // gekürzt

    p = popen(buf, "r"); [1]
                
    // gekürzt
    
}
Kein Wunder, dass dann soetwas Simples wie
RCPT TO: root+:"|touch /tmp/foo"
zu einer Sicherheitslücke führt.

Meine ganz persönliche Meinung: System-Aufrufe (egal in welcher Programmiersprache) sollten grundsätzlich nicht zulässig sondern nur unter ganz bestimmten Voraussetzungen explizit erlaubt sein.

Kommentare

Ansicht der Kommentare: Linear | Verschachtelt

rae

Das erinnert mich ganz akut an diesen vielleicht nicht mehr ganz taufrischen Link:

http://www.hornoxe.com/wp-content/picdumps/picdump144/hornoxe.com_picdump144_049.jpg

Dieser wiederum verführte mich zu dem Statement, dass jegliches Werkzeug, mit dem man Quelltext editieren kann, mit einer Zwangsaktivierung versehen werden sollte. Und der Aktivierungsschlüssel lautet "TRAUE KEINEM INPUT!" in 100facher Wiederholung.

Dirk

Puh … Ich weiß schon, warum ich sendmail NICHT benutze!

Ein Besserwisser schrieb

Nur zur Sicherheit:

Sendmail ist NICHT der Fehler. Sendmail weigert sich sogar, die Pipe zu akzeptieren.
Postfix ist NICHT das Problem, da normalerweise Mails ohne Domain-Part abgewiesen werden.

Verwundbar sind nur die Postmaster, die ihre Server so seltsam konfigurieren, dass sie unter dem root-Account laufen und/oder zumindest deren Plug-Ins. Darüber hinaus muss man auch noch grobe Schnitzer in die Konfiguration einbauen, und erst dann ist eine solche Sicherheitslücke im Plug-In fatal.

Die Lücke an sich ist natürlich auch ein riesiges Problem, richtet im Alleingang allerdings nicht viel Schaden an. In Kombination mit Sicherheitslücken anderer Software auf dem Server kann es sich aber schnell zu einem echten Problem hochschaukeln.

Tux2000

#!/usr/bin/perl -T

... und schon stirbt der (Perl-)Prozess, der es wagt, unverifizierten Input an kritische Funktionen wie system(), exec() oder auch als Format-String an printf() (ab 5.10) weiter zu reichen.

Mehr: http://perldoc.perl.org/perlsec.html

Generell halte ich Funktionen, die einen zusammengestrickten String an die Shell weiterreichen (wie eben system() und bei Perl auch die Varianten von open(), die popen() in C entsprechen) sicherheitsmäßig für eine extrem blöde Idee.

Tux2000

petschge

Und damit so ein Mist nicht passiert hat man execl und co erfunden. Im aufrufenden Programm weiß man ja ganz genau was programmname und was argument sein soll. Warum also dieses Wissen wegwerfen und alles in einen String zusammenpacken? Das Problem ist mal wieder nicht die Programmiersprache sondern die Unfähigkeit mancher Coder.

Exact den gleichen (konzeptionellen) Bug habe ich vor kurzen in einem PHP-Skript gesehen. Der schuldige Coder wusste nichtmal daß es Funktionsaufrufe gibt, bei denen man Programmname und Argumente sauber getrennt übergeben kann.

Kels

...die Matrix... Sieht für mich genau so aus wie im Film, nur dass die Zeichen nicht grün sind...

Kommentar schreiben

Umschließende Sterne heben ein Wort hervor (*wort*), per _wort_ kann ein Wort unterstrichen werden.
Standard-Text Smilies wie :-) und ;-) werden zu Bildern konvertiert.
Die angegebene E-Mail-Adresse wird nicht dargestellt, sondern nur für eventuelle Benachrichtigungen verwendet.

Um maschinelle und automatische Übertragung von Spamkommentaren zu verhindern, bitte die Zeichenfolge im dargestellten Bild in der Eingabemaske eintragen. Nur wenn die Zeichenfolge richtig eingegeben wurde, kann der Kommentar angenommen werden. Bitte beachten Sie, dass Ihr Browser Cookies unterstützen muss, um dieses Verfahren anzuwenden.
CAPTCHA

BBCode-Formatierung erlaubt
Formular-Optionen