Egyetlen plusz sortörés is elronthatja a TLS-t CONNECT után
Vizsgálja meg a HTTP-fejlécek keretezését, amikor egy kézzel írt proxy-összekötő alagutat nyit, és azonnal TLS-dekódolási hibát ad.
Amikor a CONNECT 200-at ad vissza, és a TLS azonnal nem tud dekódolni, vizsgálja meg az összekötő határbájtjait, mielőtt tanúsítványokat vagy titkosításokat cserél.
Egy előállított engedélyezési érték már végződhet sortöréssel. Egy további sorvég idő előtt lezárhatja a HTTP-fejléceket, és a szándékolt Host mezőt vagy más egyszerű szöveget a kérés mögött hagyhatja.
Egy minimális HTTP/1.1 CONNECT kérés CRLF-et használ a sorok között, és egy üres sort a végén:
b"CONNECT example.com:443 HTTP/1.1\r\nHost: example.com:443\r\n\r\n"Helyezzen minden engedélyezési mezőt az utolsó üres sor elé, beágyazott sortörés nélkül. A Pythonban a "\n" sortörést jelöl; a backslasht és n betűt tartalmazó nyers karakterlánc nem. Ellenőrizze, milyen bájtokat állít elő egy kódolási segédeszköz, mielőtt megpróbálja eltávolítani őket—a régebbi segédeszközök sortöréseket adhattak hozzá.
Miután a CONNECT sikeres, ezek a fennmaradó bájtok az alagútprotokollhoz tartoznak. Az elkóborolt egyszerű szöveg elérhet egy TLS-t váró partnert. A sikeres állapot nem tudja megjavítani a hibás kérés után már sorba állított bájtokat.
Vizsgálja meg a fogadási határt is. Olvassa el a teljes proxyválaszt, mielőtt átadja a socketet a TLS-nek, kezelje a részleges olvasásokat, és őrizzen meg mindent, amit a fejléceken túl olvas. Egy socketolvasásnak nem kell egy teljes üzenetet tartalmaznia.
Ha ez az elemző az Öné, hasonlítsa össze a szerkesztett bájtábrázolást a huzal nyelvtanával; tartsa láthatóan a hosszakat és a sorhatárokat, miközben elrejti a jelszót. Egy olyan alkalmazás számára, amelynek csak proxykapcsolatra van szüksége, egy karbantartott összekötő elkerüli, hogy ennek a keretező kódnak a tulajdonosa legyen.