Carried over from the old Kecalek_python master (214da18).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2.8 KiB
2.8 KiB
tests/pentest_client.py
Automatizovaný pentest/integration harness nad živým serverem s reálnými účty.
Co test dělá
-
Conversation Isolation (AuthZ)
- Účet
outsiderzkoušíget_messages,mark_readasend_messagedo konverzace, kde není členem. - Očekávání: server vrátí
error+"Not a member".
- Účet
-
Malformed Header Rejection
- Platný člen konverzace pošle
send_messages obřímratchet_header. - Očekávání: server odmítne request (
Invalid ratchet_header format), tj. funguje_validate_headerlimit.
- Platný člen konverzace pošle
-
Session Reset Authorization
outsiderpošlesession_resetnapeer_user_id.- Očekávání:
error+"No shared conversation". - Pokud účty sdílenou konverzaci opravdu mají, test se označí jako
SKIP(setup issue, ne nutně bezpečnostní chyba).
-
Login Rate Limits (volitelné)
- Anonymní klient spamuje
login_start:- stejný email v různých kombinacích velikosti písmen (test case-normalization bucketu),
- potom rotace různých emailů ze stejné IP (test per-IP bucketu).
- Očekávání: aktivuje se jak per-email limit, tak per-IP limit.
- Anonymní klient spamuje
Požadavky
- Běžící server (
server.py). - Existující lokální klíče pro účty v
~/.encrypted_chat/<email>/(stejné jako pro běžného CLI klienta). - 3 různé účty:
member(A),peer(B),outsider(C).
Spuštění
python3 tests/pentest_client.py \
--server-host localhost \
--member-email alice@example.com \
--peer-email bob@example.com \
--outsider-email mallory@example.com
Skript si vyžádá hesla interaktivně. Lze je předat i argumenty:
python3 tests/pentest_client.py \
--server-host localhost \
--member-email alice@example.com --member-password '***' \
--peer-email bob@example.com --peer-password '***' \
--outsider-email mallory@example.com --outsider-password '***'
Volby:
--conversation-id <uuid>: použije konkrétní konverzaci místo auto member<->peer DM.--skip-login-rate-limit: přeskočí testlogin_startlimiteru.--server-host <host>: přepíšeSERVER_HOSTpro tento běh.--server-port <port>: přepíšeSERVER_PORTpro tento běh.
Poznámka k TLS:
- Pokud máš v
.envSERVER_HOST=0.0.0.0, je to správně pro server bind, ale klient na to nesmí přistupovat přes TLS. - Pro klienta použij
--server-hosts hodnotou, která je v certifikátu (SAN/CN), typickylocalhostnebo konkrétní IP.
Výstup
Skript tiskne souhrn:
[PASS]test prošel,[FAIL]test selhal (potenciální regrese),[SKIP]test nelze vyhodnotit kvůli dataset/setup podmínkám.
Návratový kód:
0= bez failu,1= alespoň jeden fail,2= chyba vstupních parametrů.