Seite 1 von 1

[erledigt]Sicherheitsrisiko im ext. Login-Snippet?

Verfasst: 02.01.2009 09:49
von godmod23
Hallo liebe Community,

um einen Login auf meiner Homepage mithilfe des Forum-Accounts zu ermöglichen, verwende ich das Externer Login / Logout für phpBB3-Snippet von Dr. Death.
Es funktioniert bei mir einwandfrei, allerdings ist es so, dass man sich über dieses Snippet so oft falsch anmelden kann wie man will (falsches PW). Dies kann meiner Meinung nach einen Brute-Force-Angriff auf einen Useraccount ermöglichen.
Wenn die Anmeldung nicht wie beim Snippet über eine eigene login.php, sondern über die normale upc.php?mode=login erfolgt, wird ein automatisierter Brute-Force Angriff durch das Erzwingen der Eingabe eines Bestätigungscodes (Captcha) nach drei falschen Password-Eingaben verhindert bzw. zumindest schwieriger gemacht.

Damit bei mir das unendliche ausprobieren eines Passwortes nicht möglich ist, hab ich folgende Veränderungen vorgenommen:
ALT:

Code: Alles auswählen

if (isset($username) && isset($password))
{
    $auth->login($username, $password, $autologin, $viewonline);
}
NEU:

Code: Alles auswählen

if (isset($username) && isset($password))
{
   $ergebnis = $auth->login($username, $password, $autologin, $viewonline);

if ($ergebnis["user_row"]["user_login_attempts"] > 2)
			{$user->session_kill(); }
			 echo "Du hast dich zuoft anmeldet. Gehe bitte ins Forum und melde dich dort an.";
}
Dies ist natürlich nur ein kleiner Ausschnitt aus meinen Veränderungen...

Zur Erklärung: die auth-klasse gibt ja bestimmte return-Werte zurück, u.a. "user_login_attempts", wo ja die Fehlversuche gespeichert werden (btw: die Zahl wird allerdings nie größer als 3). Indem ich den Einlogg-Vorgang eine Variable zuweise, bekomme ich mit "$ergebnis["user_row"]["user_login_attempts"]" die Fehlversuche heraus. Sollte sich mein Benutzer nun zuoft eingeloggt haben, wird er wieder ausgelogged ("session_kill()"), denn trotz dass er zu viele Versuche hatte sieht phpbb3 in als "registered user" an. Außerdem sag ich meinem Benutzer, er soll sich über die ucp.php?mode=login anmelden, damit er den Bestätigungscode eingeben kann und die Fehlversuche wieder bei 0 sind.

Es werden bestimmt einige denken, wieso verwendet er nicht gleich den Login über die ucp.php. Naja, es ist so, dass das Template von meinem Forum nicht für meine normale geeignet ist, weswegen mir so ein Snippet lieber ist...

Über Diskussionen zu diesem Thema würde ich mich sehr freuen,

Viele Grüße, GodMod

Re: Mögl. Sicherheitslücke im ext. Login-Snippet

Verfasst: 02.01.2009 11:24
von Miriam
Also ich sehe da keine Sicherheitslücke. Nur eine vergessene Abfrage.
Das externe Script wertet nicht aus, dass die Anzahl der Loginversuche überschritten wurde. Das Board schon.
Es hat nur den Anschein, dass Du immer und immer wieder versuchen kannst, Dich einzuloggen und die Sicherheitseinstellungen des Boards dabei umgehen kannst.
Das Board hat schon aber schon zu gemacht.

Du könntest den aktuellen Status des Anmeldeversuches so auslesen:

Code: Alles auswählen

	//Wenn username und passwort uebergeben worden sind, starte einen Anmeldeversuch
    if (isset($username) && isset($password)) 
    {
		$check = $auth->login($username, $password, $autologin, $viewonline);
		switch ($check['error_msg'])
		{
			case 'NO_PASSWORD_SUPPLIED':
				$message = 'Kein Passwort angegeben';
				break;
			case 'LOGIN_ERROR_PASSWORD':
				$message = 'Falsches Passwort angegeben.';
				break;
			case 'LOGIN_ERROR_ATTEMPTS':
				$message = 'Zu viele falsche Versuche, bitte melde Dich direkt im Forum an, ' . $username . '.'; 
				break;
			default: 
				$message = 'Du bist angemeldet';
		}
	}
und weiter unten:

Code: Alles auswählen

 /**
    *
    * Optionaler Code
    * Prüfe ob User eingeloggt ist oder nicht
    *
    */

    if ($user->data['is_registered'])
    {
        // Hier steht der Code für ein erfolgreich eingeloggter User
        echo $message . "<br /><br />";
        
        //Optionaler Code zum Ausloggen. 
        //Es ist wichtig, das die Session ID mit der Funktion append_sid() uebergeben wird.
        echo 'Zum Abmelden <a href="'. append_sid("{$phpbb_root_path}login.$phpEx", "mode=logout") . '">hier</a> klicken';
    }
    else
    {
        //Wenn Du hier landest bist Du nicht eingeloggt.
        echo $message . "<br /><br />";
        echo "<a href=\"login.html\">Nochmal versuchen?</a>";
		
    }

Re: Mögl. Sicherheitsrisiko im ext. Login-Snippet

Verfasst: 02.01.2009 12:20
von godmod23
Hallo Miriam,

Das es keine Lücke ist im eigentlichen Sinne, da muss ich dir vollkommen recht geben, es ist einer ein "Risiko"...

dass das Board zumacht ist ja klar, weil wenn sich der User über die ucp.php?mode=login einloggt, muss er den Bestätigungscode eingeben.

Auf meiner Homepage habe ich es genauso gemacht wie in deinem geposteten Code, habs aber in meinem Code zur Vereinfachung weggelassen. Auf jeden Fall danke dafür...

Ich wollte einfach nur aufzeigen, dass man sich mit Dr. Deaths' Snippet unbegrenzt falsch anmelden kann. Ob dadurch ein Bruteforce möglich ist, kann ich nicht genau sagen, ausschließen würde ich es aber nicht. Ich denke, man sollte andere Benutzer des Snippets drauf aufmerksam machen, dass eine unbegrenzte PW-Abfrage möglich ist. Es kann ja sein, dass jemand einen privaten Bereich seiner Homepage z.B. mithilfe des Snippets gesichert hat...

VG, GodMod

Re: Mögl. Sicherheitsrisiko im ext. Login-Snippet

Verfasst: 02.01.2009 13:09
von BB-BF-BM
Hallo!

Auch ein Risiko existiert nicht!

In der Funktion $auth->login() wird bereits die Prüfung durchgeführt.
Du kannst es selbst ausprobieren:
Nimm das ursprüngliche Snippet von Dr. Death und versuche mehrmals (je nach Einstellung), dich mit einem falschen Passwort anzumelden.
Nun versuchst du es mit deinem korrekten Passwort und du wirst feststellen, dass du trotzdem nicht angemeldet wirst. Willst du dich auf dem Board anmelden, musst du erst ein CAPTCHA lösen.

Deshalb kann Dr. Death Snippet gefahrlos verwendet werden.

Re: Mögl. Sicherheitsrisiko im ext. Login-Snippet

Verfasst: 02.01.2009 13:25
von godmod23
Hallo!

wahrscheinlich hatte ich irgendwo einen Denkfehler drinnen oder habe mich vertan... Ich hab mir das originale Snippet auf den Server getan und so ausprobiert wie du's sagtest, und gesehn, dass ich auch nach mehrmaliger Falscheingabe trotzdem weiterhin ausgeloggt bin. Aber ich hätte schwören können, dass es bei mir in der lokalen Testumgebung zumindest so war, dass ich eingeloggt war... Oder vielleicht hatte ich auch nur irgendwo einen Fehler in meinem Source-Code... Auf jeden Fall funktioniert es jetzt so, ich konnte jetzt die von mir im ersten Post gezeigte Abfrage dank euch wieder ausbauen!

Tut mir leid, dass ich euch eure Zeit geraubt hab, wenigstens haben Benutzer jetzt mit Miriams Code ein schönes Beispiel, wie sie Fehlermeldungen wie z.B. falsches PW, usw. erhalten können.

Danke nochmal für eure schnellen Reaktionen!

VG GodMod

Re: [erledigt]Sicherheitsrisiko im ext. Login-Snippet?

Verfasst: 02.01.2009 14:36
von Dr.Death
Hallo,

in dem Script es mit Absicht keine Fehlermeldung drin, damit man keine Info bekommt warum man nicht angemeldet worden ist.
Das Script benutzt ja eine API und nicht das User Frontend vom Forum.
Die API macht natürlich dicht bei zu vielen Versuchen, lässt den Angreifer darüber aber im ungewissen.
Daher weiß der Angreifer nicht wie viel Fehlversuche stattgefunden haben und ob das richtige Passwort dabei gewesen ist.