Evtl. Sicherheitslücke mit Pattern "_0X."?

leseratte10

Mitglied
Mitglied seit
23 Apr 2012
Beiträge
406
Punkte für Reaktionen
2
Punkte
18
Hallo,

mir ist heute eine interessante Sache im Dialplan aufgefallen:

Nehmen wir mal an, ich habe folgenden Dialplan, damit nur Anrufe nach Deutschland möglich sind:

Code:
exten => _0X.,1,Dial(SIP/sipgate-out/0049${EXTEN:1}); 
exten => _00X.,1,Playback(kein-ausland);
exten => _00X.,2,Hangup();

Das ist der einzige Eintrag im Kontext, d. h. alle Benutzer in diesem Kontext sollten nur nach Deutschland telefonieren können.
Wenn der Nutzer aber ein SIP-telefon hat, was auch Buchstaben und Sonderzeichen kann, könnte er folgendes wählen:

Code:
022112345&SIP/sipgate-out/irgend-eine-teure-nummer-im-ausland@asterisk-server-ip

Was dann im Dial-Befehl zu folgendem umgesetzt werden würde:

Code:
Dial(SIP/sipgate-out/004922112345&SIP/sipgate-out/teure-auslandsnummer);

Dafür muss der "Angreifer" natürlich im lokalen Netz sein und den trunk-name kennen - trotzdem kann man so eine evtl. vorhandene Auslandsbeschränkung "aufheben".

Wählt der Anrufer gar folgendes:

Code:
0221123456&Local/administration/123

kann er evtl. auf Admin-Funktionen zugreifen, an die er normalerweise nicht dran kommt ...

Oder habe ich da einen Denkfehler? Ich habe das jetzt nur kurz mit "Verbose()" dargestellt und es sah so aus, als würde das funktionieren.

Gibt es da ne Lösung für? Das Pattern "X" steht für eine Ziffer, das Pattern "." für eine beliebige Anzahl Zeichen.
Gibts auch irgend ein Pattern für eine beliebige Anzahl Ziffern?

Leseratte10
 
Zuletzt bearbeitet:
Wenn der Dialplan in AEL geschrieben ist, kann man Regex benutzen, um auf nur Ziffern zu beschränken. mit Freeswitch verwechselt
In der herkömmlichen Syntax bleibt nur der Punkt als Platzhalter.

Ich persönlich halte das Risiko für überschaubar, aber wenn Du das vermeiden möchtest, bau vor dem Dial ein ExecIf ein, das prüft ob wirklich nur Ziffern gewählt wurden und ansonsten ein Hangup ausführt.

Ist aber durchaus eine interessante Sache, die Du da aufzeigst. Das war mir so nicht bewusst.
 
Zuletzt bearbeitet von einem Moderator:
Wenn man ENUM nutzt und eine Nummer mit Durchwahlen hat, kann der "Fehler" sogar auch von außerhalb ausgenutzt werden, wenn der Dialplan z. B. so aufgebaut ist:

Code:
context enum {
	_49221123456. => {
		Dial(SIP/${EXTEN:11},,tkc); 
	}; 
};

Ob das den Asterisk-Entwicklern schon bekannt ist?
Ich bau dann einfach mal ne Überprüfung auf "&" in der Extension in meinen Wählplan ein.
 
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.