initial commit
This commit is contained in:
79
tests/PENTEST_CLIENT.md
Normal file
79
tests/PENTEST_CLIENT.md
Normal file
@@ -0,0 +1,79 @@
|
||||
# `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í
|
||||
|
||||
```bash
|
||||
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:
|
||||
|
||||
```bash
|
||||
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ů.
|
||||
Reference in New Issue
Block a user