Skip to content
KitploitKITPLOIT
ToolsExploitsBlog
Log in
Einreichen
ToolsExploitsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
asus-cmd — ASUS Router infosvr UDP Broadcast root-Befehlsausführung | Kitploit
Tools/GitHubGitHub/jduck/asus-cmd
Embedded-System-SicherheitIoT-SicherheitSchwachstellenanalyseExploitationNetzwerksicherheitPenetrationstestsHardware- & IoT-Sicherheit
GitHubjduck/asus-cmd

asus-cmd

ASUS Router infosvr UDP Broadcast root-Befehlsausführung

Repository anzeigen
2523522vor 11 JahrenVon Kitploit geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

ASUS-Router infosvr UDP-Broadcast Root-Kommandoausführung

Mehrere Modelle von ASUS-Routern enthalten einen Dienst namens infosvr, der auf UDP-Broadcast-Port 9999 auf der LAN- oder WLAN-Schnittstelle lauscht. Er wird von einem der ASUS-Tools verwendet, um die Router-Konfiguration zu erleichtern, indem Router im lokalen Subnetz automatisch gefunden werden. Dieser Dienst läuft mit root-Rechten und enthält eine Schwachstelle zur nicht authentifizierten Kommandoausführung. Der Quellcode dieses Dienstes sowie des restlichen Routers ist auf der ASUS-Support-Website verfügbar.

CVE

Die dieser Schwachstelle zugewiesene CVE-Kennung ist CVE-2014-9583 (leider am Ende doch nicht CVE-2014-10000 :-/).

Betroffene Versionen

Derzeit gelten alle bekannten Firmware-Versionen für die betroffenen Router (RT-AC66U, RT-N66U, usw.) als verwundbar. Die Tests wurden gegen 3.0.0.376.2524-g0013f52 durchgeführt.

Die folgenden Router/Firmware-Versionen sind nachweislich verwundbar:

RouterFirmware-VersionVerifiziert von
RT-N66U3.0.0.4.376_1071-g8696125Friedrich Postelstorfer
RT-AC87U3.0.0.4.378_3754David Longenecker
RT-N56U3.0.0.4.374_5656@argilo
RT-AC68U3.0.0.4.376_3626-g9a8323e@Arie
DSL-N55U3.0.0.4.374_4422-gc83c78f@S2-
DSL-AC68U3.0.0.4.376_2158-g340202b@magJ, @gitFurious
RT-AC66R3.0.0.4.376_2524-g0013f52@asgh
RT-AC66R3.0.0.4.376_3602@facerolling
RT-AC55U3.0.0.4.376_6587-gaa506e9@pellaeon
RT-N12HP_B13.0.0.4.374_1327@vittee
RT-N163.0.0.4.220@xorrbit

Darüber hinaus sind Router mit Firmware auf Basis des von der Community unterstützten asuswrt-merlin vor Version 376.49_5 verwundbar.

Router mit Firmware-Revisionen, die am oder nach dem 12. Januar 2015 veröffentlicht wurden, sollten nicht betroffen sein. Die folgende Tabelle erfasst Meldungen nicht betroffener Router/Firmware-Versionen.

RouterFirmware-VersionVerifiziert von
RT-AC66R3.0.0.4.376_3754-g5ef7c1f@asgh
RT-N12HP_B13.0.0.4.376_3754-g5ef7c1f@vittee

Technische Details

Betrachten Sie den folgenden Auszug aus dem ASUSWRT-Merlin-Projekt, einem erweiterten Fork des ASUS-Codes. Sie können die Datei in voller Länge (für extra Lulz empfohlen) hier ansehen.

   177  char *processPacket(int sockfd, char *pdubuf)
   178  {
...
   202      phdr = (IBOX_COMM_PKT_HDR *)pdubuf;
...
   207      if (phdr->ServiceID==NET_SERVICE_ID_IBOX_INFO &&
   208          phdr->PacketType==NET_PACKET_TYPE_CMD)
   209      {
...

Die Funktion processPacket wird aufgerufen, nachdem ein Paket von INFO_PDU_LENGTH (512) Bytes empfangen wurde. Der spezifisch verwundbare Codepfad ist main->processReq->processPacket. Der Dienst castet das Paket dann in eine Struktur und prüft, ob die Felder ServiceID und PacketType den erwarteten Werten entsprechen.

Der folgende Block enthält die vermutete Grundursache dieser Schwachstelle.

   222          if (phdr->OpCode!=NET_CMD_ID_GETINFO && phdr->OpCode!=NET_CMD_ID_GETINFO_MANU)
   223          {
   224                  phdr_ex = (IBOX_COMM_PKT_HDR_EX *)pdubuf;       
   225                  
   226                  // Check Mac Address
   227                  if (memcpy(phdr_ex->MacAddress, mac, 6)==0)
   228                  {
   229                          _dprintf("Mac Error %2x%2x%2x%2x%2x%2x\n",
   230                                  (unsigned char)phdr_ex->MacAddress[0],
   231                                  (unsigned char)phdr_ex->MacAddress[1],
   232                                  (unsigned char)phdr_ex->MacAddress[2],
   233                                  (unsigned char)phdr_ex->MacAddress[3],
   234                                  (unsigned char)phdr_ex->MacAddress[4],
   235                                  (unsigned char)phdr_ex->MacAddress[5]
   236                                  );
   237                          return NULL;
   238                  }
   239                  
   240                  // Check Password
   241                  //if (strcmp(phdr_ex->Password, "admin")!=0)
   242                  //{
   243                  //      phdr_res->OpCode = phdr->OpCode | NET_RES_ERR_PASSWORD;
   244                  //      _dprintf("Password Error %s\n", phdr_ex->Password);     
   245                  //      return NULL;
   246                  //}
   247                  phdr_res->Info = phdr_ex->Info;
   248                  memcpy(phdr_res->MacAddress, phdr_ex->MacAddress, 6);
   249          }

Der Block beginnt damit, ein paar OpCode-Werte auszuschließen, die vermutlich konstruktionsbedingt keine Authentifizierung erfordern. Anschließend ruft er memcpy auf und prüft auffälligerweise den Rückgabewert gegen Null. Dies ist ein starkes Indiz dafür, dass der Autor eigentlich memcmp verwenden wollte. Allerdings ist die Kenntnis der MAC-Adresse des Geräts selbst dann kaum eine ausreichende Authentifizierung, wenn diese Prüfung korrekt implementiert wäre.

Der folgende Block ist auskommentiert, zeigt aber, dass der Autor irgendwann mit der Prüfung eines Passworts experimentiert hat. Wobei in diesem Fall das Passwort fest als „admin“ kodiert war.

Weiter geht es mit der folgenden switch-Anweisung, die die Verarbeitung anhand des übergebenen OpCode weiterleitet.

   251          switch(phdr->OpCode)
   252          {
...
   428                  case NET_CMD_ID_MANU_CMD:
   429                  {
   430                       #define MAXSYSCMD 256
   431                       char cmdstr[MAXSYSCMD];
   432                       PKT_SYSCMD *syscmd;
...
   440                       syscmd = (PKT_SYSCMD *)(pdubuf+sizeof(IBOX_COMM_PKT_HDR_EX));
...
   443                       if (syscmd->len>=MAXSYSCMD) syscmd->len=MAXSYSCMD;
   444                       syscmd->cmd[syscmd->len]=0;
   445                       syscmd->len=strlen(syscmd->cmd);
   446                       fprintf(stderr,"system cmd: %d %s\n", syscmd->len, syscmd->cmd);
   447  #if 0
...
   512  #endif
   513                       {
   514                          sprintf(cmdstr, "%s > /tmp/syscmd.out", syscmd->cmd);
   515                          system(cmdstr);

Wenn ein Angreifer den OpCode-Wert NET_CMD_ID_MANU_CMD angibt, verarbeitet der vorhergehende Block das Paket, indem er es in eine PKT_SYSCMD-Struktur castet. Somit werden sämtliche Member von syscmd vollständig vom Angreifer kontrolliert. Bevor der Autor sich darum kümmert (zwinker), die Befehlszeichenkette mit NUL abzuschließen, führt er den Befehl in Zeile 514 aus. Nach der Ausführung des Befehls wird die Ausgabe aus der temporären Datei gelesen und an die Quelladresse des auslösenden Pakets zurückgesendet.

Empfehlungen

Endbenutzer: Aktualisieren Sie die Firmware auf Revision 3.0.0.4.376.3754 oder neuer. Es ist wichtig zu beachten, dass die Funktion „Auf Updates prüfen“ des Routers möglicherweise nicht ordnungsgemäß funktioniert. Prüfen Sie manuell die Version der installierten Firmware und laden Sie bei älteren Versionen die neue Firmware herunter bzw. installieren Sie diese.

ASUS/Merlin: Entfernen Sie die Funktion zur Remote-Kommandoausführung aus diesem Dienst. Selbst wenn sie durch eine starke Authentifizierung abgesichert wäre, ist das Senden eines Passworts an das gesamte lokale Netzwerk nicht wirklich wünschenswert. Wenn Kommandoausführung wirklich gewünscht ist, sollte sie über SSH oder einen ähnlichen sicheren Mechanismus bereitgestellt werden.

Tool herunterladen