Open Source im professionellen Einsatz

Bugzilla: Fehler in Zugangskontrolle

Eine Sicherheitslücke in Bugzilla hat zur Folge, dass sich ein entfernter Angreifer unerlaubt auf Bugzilla-Systemen registrieren kann. Ursache hierfür ist eine Schwachstelle in dem E-Mail-basieten Registrierungsprozess. Dieser Prozess setzt voraus, dass der Anwender einen vom System generierten Token geschickt bekommt und diesen dann bereitstellen muss, um zu die E-Mail-Adresse zu verifizieren. Hierbei kann Bugzilla so eingestellt werden, dass es nur E-Mail-Adressen einer bestimmten Domain zulässt, zum Beispiel mozilla.org für bugzilla.mozilla.org. Dies stellt eine einfache Zugangskontrolle dar.
Gibt der Anwender eine E-Mail-Adresse an, so wird diese zusammen mit einem im Bugzilla-Code generierten Token in der Datenbank abgelegt. Die Adresse wird
dabei in eventdata abgelegt. Nach Eingabe der Adresse wird diese zunächst geprüft, bevor sie in die Datenbank geschrieben wird:

sub check_and_send_account_creation_confirmation {
    my ($self, $login) = @_;

# Check the email address of the user
    $login = $self->check_login_name($login);
    if ($login !~ /$creation_regexp/i) {
        ThrowUserError('account_creation_restricted');
    }

    # Create and send a token for this new account.
    require Bugzilla::Token;
    Bugzilla::Token::issue_new_user_account_token($login);
}

Anschließend werden die Daten in die Datenbank eingetragen und eine Mail mit dem Token an den Benutzer geschickt.   

sub issue_new_user_account_token {
    my $login_name = shift; # The email address we entered
    my $template = Bugzilla->template;
    my $vars = {};

# Create the new token in the DB
    my ($token, $token_ts) = _create_token(undef, 'account', $login_name);

# Set the email address, expiration date, and token as the email message variables
# (Bugzilla->params->{'emailsuffix'} is empty by default [and in almost all installations])
    $vars->{'email'} = $login_name . Bugzilla->params->{'emailsuffix'};
    $vars->{'expiration_ts'} = ctime($token_ts + MAX_TOKEN_AGE * 86400);
    $vars->{'token'} = $token;

# Render the email message using the complied variables
    my $message;
    $template->process('account/email/request-new.txt.tmpl', $vars, \$message)
      || ThrowTemplateError($template->error());

# Send the confirmation email
    MessageToMTA($message);
}

Das Problem besteht nun in dem Datenbank-Datentyp unter dem die E-Mail-Adresse in eventdata abgelegt hat. Hierbei wird das tinytext-Format verwendet.
Dieser Datentyp ist auf 255 Zeichen beschränkt, was eigentlich für jede E-Mail-Adresse ausreichen sollte. Allerdings besteht hier nun die Sicherheitslücke. Da Bugzilla zur Registrierung den Domain-Namen heranzieht, kann der Angreifer einfach eine so lange Adresse angeben, dass der wahre Domain-Name jenseits der 255 Zeichen liegt. Dann wird Bugzilla fälschlicherweise davon ausgehen, dass die letzten Zeichen vor dem 255 Zeichen-Limit den Domain-Namen der Adresse darstellen. Der Angreifer kann nun hier prinzipiell jeden beliebigen Namen anlegen und sich so an jedem Bugzilla-System registrieren. Das heißt der Angreifer kann eine E-Mail-Adresse folgender Art angeben:

aaa[...]aaa@mozilla.com.attackerdomain.com

Hiermit könnte er sich dann bei bugzilla.mozilla.com registrieren, obwohl die wahre Domain der E-Mail-Adresse attackerdomain.com ist und nicht mozilla.com. Diese Schwachstelle ist also sehr einfach auszunutzen, und erlaubt es dem Angreifer sich auf jedem Bugzilla-System anzumelden.
Obowohl diese Schwachstelle auf den ersten Blick nicht kritisch klingt, so kann sie doch weitreichende Konsequenzen haben. Denn viele Bugzilla-Systeme enthalten neben Informationen zu allgemeinen Fehler in Software auch sicherheitskritische Lücken, die noch nicht veröffentlicht sein. Potentielle Angreifer können dadurch an Schwachstellen-Informationen gelangen, welche noch gar nicht veröffentlicht oder korrigiert sind.
Betroffen sind die Versionen 2.0 bis 4.2.14, 4.3.1 bis 4.4.9 und 4.5.1 bis 5.0.

comments powered by Disqus

Stellenmarkt

Artikelserien und interessante Workshops aus dem Magazin können Sie hier als Bundle erwerben.