Files
Kecalek_python/tests/PENTEST_CLIENT.md
2026-03-11 16:54:14 +01:00

2.8 KiB

tests/pentest_client.py

Automatizovaný pentest/integration harness nad živým serverem s reálnými účty.

Co test dělá

  1. Conversation Isolation (AuthZ)

    • Účet outsider zkouší get_messages, mark_read a send_message do konverzace, kde není členem.
    • Očekávání: server vrátí error + "Not a member".
  2. Malformed Header Rejection

    • Platný člen konverzace pošle send_message s obřím ratchet_header.
    • Očekávání: server odmítne request (Invalid ratchet_header format), tj. funguje _validate_header limit.
  3. Session Reset Authorization

    • outsider pošle session_reset na peer_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).
  4. 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.

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čí test login_start limiteru.
  • --server-host <host>: přepíše SERVER_HOST pro tento běh.
  • --server-port <port>: přepíše SERVER_PORT pro tento běh.

Poznámka k TLS:

  • Pokud máš v .env SERVER_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-host s hodnotou, která je v certifikátu (SAN/CN), typicky localhost nebo 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ů.