Neuigkeiten:

Am Sonntag den 8.12.2024 kann es ab ca. 8:00 Uhr zu kurzzeitigen Einschränkungen / Ausfällen bei den Diensten des FHEM Vereines kommen.
Die Server müssen mal gewartet und dabei neu gestartet werden ;)

Hauptmenü

XiaomiDevice & Crypt/CBC.pm lässt fhem abstürzen

Begonnen von Jamo, 20 Oktober 2024, 19:43:09

Vorheriges Thema - Nächstes Thema

Jamo

Hi,
ich habe einen Xiaomi VacuumCleaner, der als XiaomiDevice eingebunden ist.
defmod wall_e XiaomiDevice 172.21.0.18 12345678abcd1234567812345678efghBeim starten des Cleaners, ich glaube wenn er noch nicht ganz mit dem WLAN verbunden ist (ich schalte im Urlaub die Steckdose des Saugroboters aus) stürzt fhem mit folgender Fehlermeldung ab:

ZitatFATAL: input size not equal to blocksize (16) at /usr/share/perl5/Crypt/CBC.pm line 492.

sub _cbc_decrypt {
    my $self = shift;
    my ($crypt,$iv,$result,$blocks) = @_;
    # the copying looks silly, but it is slightly faster than dereferencing the
    # variables each time
    my ($i,$r) = ($$iv,$$result);
    foreach (@$blocks) {
        $r    .= $i ^ $crypt->decrypt($_);  # ZEILE 492
        $i     = $_;
    }
    ($$iv,$$result) = ($i,$r);
}

Weiss jemand wie ich den Absturz verhindern kann? Ich habe versucht, die Zeile 492 mit eval zu klammern, um den Absturz zu verhindern, aber das funktioniert auch nicht.
$r    .= eval($i ^ $crypt->decrypt($_));
Bullseye auf iNUC, Homematic + HMIP(UART/HMUSB), Debmatic, HUEBridge, Zigbee/Conbee III, FB7690, Alexa (fhem-lazy), Livetracking, LaCrosse JeeLink, LoRaWan / TTN / Chirpstack, Sonos, ESPresence

rudolfkoenig

Meiner Ansicht nach gehoert das im FHEM/72_XiaomiDevice.pm gefixt.

Ich gehe davon aus, dass $cbc->decrypt_hex($data) nur mit einem sinnvollen Datenlaenge aufgerufen werden darf (z.Bsp. length($data) % 32 == 0),
und sowas kann man im FHEM Modul vor dem Aufruf pruefen. Da ich kein Geraet habe, habe ich das nicht getestet.

Jamo

#2
Hallo Rudolf,
danke, das scheint zu funktionieren. Ich habe in 72_XiaomiDevice.pm, die Zeile mit decrypt_hex vorher auf eine sinnvolle Datenlaenge geprüft. Also
my $return = $cbc->decrypt_hex($data);mit deinem Vorschlag abgeprüft.my $return = 00000000000000000000000000000000;
if(length($data)%32 == 0) {
$return = $cbc->decrypt_hex($data);}
Falls ich nochmal in einen fhem Absturz komme, würde ich mich nochmal bei Dir melden.

Danke!
Bullseye auf iNUC, Homematic + HMIP(UART/HMUSB), Debmatic, HUEBridge, Zigbee/Conbee III, FB7690, Alexa (fhem-lazy), Livetracking, LaCrosse JeeLink, LoRaWan / TTN / Chirpstack, Sonos, ESPresence