Eine Schwachstelle in Asterisk hat zur Folge, dass ein entfernter Angreifer Denial-of-Service-Attacken gegen die Applikation durchführen kann. Ursache ist ein Buffer-Overflow-Fehler in der “apps/app_sms.c”-Datei, der in der “unpacksms16()”-Funktion steckt. Ein Angreifer kann diesen Fehler ausnutzen, indem er eine spezielle 16-Bit SMS-Nachricht einer bestimmten Länge an sein Opfer sendet. Diese löst den Overflow aus und lässt die Applikation abstürzen. Das Problem tritt in dem Decoding-Loop für SMS-Nachrichten auf.
Der Patch sieht folgendermaßen aus:
--- apps/app_sms.c (revision 403858)
+++ apps/app_sms.c (revision 403859)
@@ -697,7 +697,7 @@
}
while (l--) {
int v = *i++;
- if (l--) {
+ if (l && l--) {
v = (v << 8) + *i++;
}
*o++ = v;
@@ -715,6 +715,7 @@
} else if (is8bit(dcs)) {
unpacksms8(i, l, udh, udhl, ud, udl, udhi);
} else {
+ l += l % 2;
unpacksms16(i, l, udh, udhl, ud, udl, udhi);
}
return l + 1;
Dieser Patch korrigiert die Programmlogik zum Bestimmen der Nachrichtenlänge. Es wird damit sichergestellt, dass der Loop am Ende der Nachricht tatsächlich stoppt und kein Overflow mehr auftreten kann.
Betroffen sind die Versionen 1.8.x und 10.x
