Banc de référence hors ligne et carte de comportement du proxy #1

Open
hermes-bot wants to merge 1 commit from hermes/cartographie-comportement into main
Collaborator

Carte C3 — banc de test de référence (t_20d09fd9).

Ce que la carte demandait, et ce qui est livré

Demande Livré
Tests de référence rejouables tests/banc.py + 15 cas gelés (tests/fixtures/), 2 descripteurs d'implémentation
docs/COMPORTEMENT.md Comportement mesuré : frontière du déchiffrement, injection et nonce CSP, routes /__, page d'état, et ce qui n'est pas mesuré
Hermétique (jamais le vrai YouTube) Le banc monte sa propre origine, son propre hôte distant TLS et son propre serveur d'état ; toute implémentation qui ne déclare pas son rabattage est refusée au démarrage
Juge de la réécriture Rust Le banc ne regarde pas le code : on dépose un fichier dans tests/implementations/ et on le nomme par --implementation

Preuves

$ MITMDUMP=/tmp/mitmenv/bin/mitmdump python3 tests/banc.py
Bilan : 14 ok, 0 rouge(s), 1 non mesuré(s) (15 cas)
Écarts connus entre l'implémentation actuelle et le contrat cible : 31-hote-non-declare

$ MITMDUMP=/tmp/mitmenv/bin/mitmdump python3 tests/banc.py --exigence cible \
    --implementation mitmdump-tt-proxy-whitelist
Bilan : 14 ok, 0 rouge(s), 1 non mesuré(s) (15 cas)

$ python3 tests/banc.py --liste
injection (10 cas) : 01-page-tv-injectee … 10-sonde-probe-js
etat (2 cas)      : 20-etat-du-service, 21-refus-hors-reseau-local
hotes (3 cas)     : 30-hote-declare-opaque, 31-hote-non-declare [écart], 32-www-youtube-dechiffre

Le seul cas non mesuré est le refus 403 d'une source publique (is_local) : le banc ne tourne que sur la boucle locale. Il le dit dans son bilan au lieu de le sauter en silence.

L'écart que le banc a mis au jour

Le réglage de production est une liste noire (--ignore-hosts '\.googlevideo\.com(:443)?$') : tout hôte non nommé est déchiffré. Mesuré — un hôte inconnu reçoit un 502 alors que le tunnel devait passer (cas 31). Le contrat visé est l'inverse (liste blanche, seul www.youtube.com déchiffré) et il est atteignable sans changer une ligne de code : mitmdump-tt-proxy-whitelist rejoue le même tt_proxy.py avec --allow-hosts et passe les trois cas du jeu.

C'est le point de départ de la réécriture : le comportement est déjà écrit noir sur blanc, il reste à le porter.

Aucun fichier de l'API n'est touché, aucun déploiement, rien sur le LXC 134.

Carte **C3 — banc de test de référence** (`t_20d09fd9`). ## Ce que la carte demandait, et ce qui est livré | Demande | Livré | | --- | --- | | Tests de référence rejouables | `tests/banc.py` + 15 cas gelés (`tests/fixtures/`), 2 descripteurs d'implémentation | | `docs/COMPORTEMENT.md` | Comportement mesuré : frontière du déchiffrement, injection et nonce CSP, routes `/__`, page d'état, et ce qui n'est pas mesuré | | Hermétique (jamais le vrai YouTube) | Le banc monte sa propre origine, son propre hôte distant TLS et son propre serveur d'état ; toute implémentation qui ne déclare pas son rabattage est refusée au démarrage | | Juge de la réécriture Rust | Le banc ne regarde pas le code : on dépose un fichier dans `tests/implementations/` et on le nomme par `--implementation` | ## Preuves $ MITMDUMP=/tmp/mitmenv/bin/mitmdump python3 tests/banc.py Bilan : 14 ok, 0 rouge(s), 1 non mesuré(s) (15 cas) Écarts connus entre l'implémentation actuelle et le contrat cible : 31-hote-non-declare $ MITMDUMP=/tmp/mitmenv/bin/mitmdump python3 tests/banc.py --exigence cible \ --implementation mitmdump-tt-proxy-whitelist Bilan : 14 ok, 0 rouge(s), 1 non mesuré(s) (15 cas) $ python3 tests/banc.py --liste injection (10 cas) : 01-page-tv-injectee … 10-sonde-probe-js etat (2 cas) : 20-etat-du-service, 21-refus-hors-reseau-local hotes (3 cas) : 30-hote-declare-opaque, 31-hote-non-declare [écart], 32-www-youtube-dechiffre Le seul cas non mesuré est le refus 403 d'une source publique (`is_local`) : le banc ne tourne que sur la boucle locale. Il le dit dans son bilan au lieu de le sauter en silence. ## L'écart que le banc a mis au jour Le réglage de production est une **liste noire** (`--ignore-hosts '\.googlevideo\.com(:443)?$'`) : tout hôte non nommé est déchiffré. Mesuré — un hôte inconnu reçoit un 502 alors que le tunnel devait passer (cas 31). Le contrat visé est l'inverse (**liste blanche**, seul `www.youtube.com` déchiffré) et il est atteignable **sans changer une ligne de code** : `mitmdump-tt-proxy-whitelist` rejoue le même `tt_proxy.py` avec `--allow-hosts` et passe les trois cas du jeu. C'est le point de départ de la réécriture : le comportement est déjà écrit noir sur blanc, il reste à le porter. Aucun fichier de l'API n'est touché, aucun déploiement, rien sur le LXC 134.
Le dépôt n'avait ni test ni description du comportement : rien ne prouvait ce que le proxy
fait vraiment, et rien n'aurait jugé la réécriture en Rust. Le banc rejoue des échanges gelés
contre une implémentation déclarée dans tests/implementations/, sans jamais joindre YouTube :
il monte sa propre origine, son propre hôte distant TLS et son propre serveur d'état.

- 15 cas en 3 jeux (injection, état, frontière du déchiffrement), 14 mesurés et verts ; le
  refus 403 d'une source publique reste non mesurable depuis la boucle locale.
- Le cas 31 fige l'écart de réglage : l'implémentation actuelle termine le TLS de tout hôte
  qu'elle ne connaît pas (liste noire), le descripteur mitmdump-tt-proxy-whitelist montre que
  le contrat visé (seul www.youtube.com déchiffré) tient sans toucher au code.
- docs/COMPORTEMENT.md : carte mesurée — frontière du déchiffrement, injection et nonce de la
  CSP, routes /__, page d'état — et la liste de ce qui n'a pas été mesuré.
Collaborator

fusion-auto : pas de fusion, la PR est en conflit avec main : à rebaser. Le chef de l'atelier renvoie la carte à l'agent ; l'étiquette tombera d'elle-même une fois corrigé.

`fusion-auto` : pas de fusion, la PR est en conflit avec main : à rebaser. Le chef de l'atelier renvoie la carte à l'agent ; l'étiquette tombera d'elle-même une fois corrigé.
This pull request has changes conflicting with the target branch.
  • README.md
View command line instructions

Manual merge helper

Use this merge commit message when completing the merge manually.

Checkout

From your project repository, check out a new branch and test the changes.
git fetch -u origin "hermes/cartographie-comportement:hermes/cartographie-comportement"
git switch "hermes/cartographie-comportement"
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
foXaCe/tizentube-proxy!1
No description provided.