gr3p1p3 / transparent-proxy

41 stars 17 forks source link

session.request.complete Transfer-Encoding: chunked gzip concatenated rawResponse gunzip issue #37

Open confuciussayuhm opened 1 year ago

confuciussayuhm commented 1 year ago

Hi there,

As per your request to create another issue, here is the rawResponse buffer (in hex string format) of a concatenated rawResponse that does not decode from gzip and produces the error Uncaught Error Error: Error: incorrect header check.

Buffer.from("610d0a1f8b08000000000000000d0a3165630d0a0cc6c76ea3400000d07fe14a24623a91f6e0a11adc30c5c02a078ae9a60e6526cabfefbed3fb21fa619a610c9799f8a23f88e9352f2dfcffbf3f4416c398f822229915fa514ec35e60eb1dd280a27992c9297d64edb961af9a25ef33a5500a96afb71ab70f39948c7dcb022355db83a3a4818730aaef4ade0254b25b25afe2997613cb23bbd1f2b51bc73bd9e073c80132027496798178a706336697ad4e70fbbc3f86a3d83b972be84fda2a5e557257f8bbd076c540156a5d292c0eda243c443ca28b97ee71e0656b1575d314643e4cc14b5470b2cf01b01d8bdd50cd2b8169ac1208ce5870627fbd27064a83629840a696b9108aecc404879c934452adf7f53d6c93eb517a14ed9748e2e5a645c08a0b6965d357d789b07049806d51437c2996cce89a81ed964b59baf3fbe1285847cfa9c99b2186cd0a85371c502c92b01e0dbb3d270ba7c743e615e253bd4eb3b27d8e5030debed973a4b81fabeed2d3c71c87ee952f2ef4d395124d0b411395b1c12c27c1e70cd5bc60e69c544a8bb729dc1310463315de8ba0566ba604aab6e5d6b192492d6036791e7b88d7c8928c03dc5b1e90c2b08d7ce521ddacbb1a7c9a19390d7cbebcfc5c67cd67daf13e50bdb460aa26854c1b0d9674c3867b7ac5ebede8b2d0cf8d371d73a45b1df8260ae6c3e90ff1fbfdfb0f0000ffff0d0a610d0a0300f1ac6673530200000d0a300d0a0d0a", "hex")

The response is JSON and should look like this once decoded correctly: {"oprstatus":2,"results":[{"data":"ZC47oqCcYo74jxt2B/26+3f/Gq4Qsk4NFKCxs/D/DzCNOjzlRCY9HxwdXHcEl1SDcXUyzyjPDflByh4wiCv8L2TbKU+nqKVFO56SdpV5ySBCyB2ddUX8P/pJa4uwjbzlWPRpA8oSMNBoIFv8NE+xD6P7lngp/gEjiD4zXlbY1Z6y2geGU5BeQFi/OFDyJRJ7UbEBIQLXBQSK4wyj6DXJHv9BXLz7SaVvPbHycXgprBdEhf7Y84r3X1f598+EjxvmpwrTU/GZZxMZ96CklyBKag9v4cenn8tgT+BzQ8Fy6h8h3qTJXQThuhhTsmRSDzGyWrkfkpatkvt7mtpya8+tjqHQlLbu5GapdUg8WENrsDw0qt7HmVJo5+8xAinMo2AfzYTN6gM2WT9bFFYBkZhaH3uI7V5HEJMz3LbiDlzwrYxbBYZs/YPgXjEj3hBEFwfKAiC+FX3wCsqotzvZK9H1txl6B+7pwq6iUyGJjnjB0Jd+rp6fueVfG4JWcn6VBEUcg3ikct3lZpK9OzHTIeavOAT4tVfHm2a5+Ti16kZXs1I="}]}

gr3p1p3 commented 1 year ago

Pleaase try with v1.12.8 :) It should be fixed! Let me know!

confuciussayuhm commented 1 year ago

Getting the same error. Here's the full error trace:

Process exited with code 1
Uncaught Error Error: Error: incorrect header check
    at <anonymous> (/home/me/opt/me/me.js:385:22)
    at zlibBufferOnError (zlib:146:8)
    at emit (events:513:28)
    at emitErrorNT (internal/streams/destroy:151:8)
    at emitErrorCloseNT (internal/streams/destroy:116:3)
    at processTicksAndRejections (internal/process/task_queues:82:21)
    --- TickObject ---
    at init (internal/inspector_async_hook:25:19)
    at emitInitNative (internal/async_hooks:202:43)
    at emitInitScript (internal/async_hooks:505:3)
    at nextTick (internal/process/task_queues:132:5)
    at onDestroy (internal/streams/destroy:103:15)
    at ZlibBase._destroy (zlib:409:3)
    at _destroy (internal/streams/destroy:109:10)
    at destroy (internal/streams/destroy:71:5)
    at zlibOnError (zlib:192:8)
    at callbackTrampoline (internal/async_hooks:130:17)
    --- ZLIB ---
    at init (internal/inspector_async_hook:25:19)
    at emitInitNative (internal/async_hooks:202:43)
    at Zlib (zlib:682:18)
    at Gunzip (zlib:759:3)
    at asyncBufferWrapper (zlib:800:23)
    at injectResponse (/home/me/opt/me/me.js:384:11)
    at onDataFromUpstream (/home/me/opt/me/node_modules/transparent-proxy/core/onConnectedClientHandling.js:98:29)
    at emit (events:513:28)
    at addChunk (internal/streams/readable:324:12)
    at readableAddChunk (internal/streams/readable:297:9)
    at Readable.push (internal/streams/readable:234:10)
    at onStreamRead (internal/stream_base_commons:190:23)
    at callbackTrampoline (internal/async_hooks:130:17)
    --- TLSWRAP ---
    at init (internal/inspector_async_hook:25:19)
    at emitInitNative (internal/async_hooks:202:43)
    at TLSSocket._wrapHandle (_tls_wrap:623:24)
    at TLSSocket (_tls_wrap:523:18)
    at _updateSockets (/home/me/opt/me/node_modules/transparent-proxy/core/Session.js:298:31)
    at updateSockets (/home/me/opt/me/node_modules/transparent-proxy/core/onConnectedClientHandling.js:146:24)
    at onDataFromUpstream (/home/me/opt/me/node_modules/transparent-proxy/core/onConnectedClientHandling.js:103:17)
    at processTicksAndRejections (internal/process/task_queues:95:5)
    --- await ---
    at processTicksAndRejections (internal/process/task_queues:95:5)
    --- await ---
    at emit (events:513:28)
    at addChunk (internal/streams/readable:324:12)
    at readableAddChunk (internal/streams/readable:297:9)
    at Readable.push (internal/streams/readable:234:10)
    at onStreamRead (internal/stream_base_commons:190:23)
    at callbackTrampoline (internal/async_hooks:130:17)
    --- TCPWRAP ---
    at init (internal/inspector_async_hook:25:19)
    at emitInitNative (internal/async_hooks:202:43)
    at Socket.connect (net:1169:7)
    at connect (net:242:17)
    at prepareTunnel (/home/me/opt/me/node_modules/transparent-proxy/core/onConnectedClientHandling.js:236:40)
    at processTicksAndRejections (internal/process/task_queues:95:5)
    --- await ---
    at handleProxyTunnel (/home/me/opt/me/node_modules/transparent-proxy/core/onConnectedClientHandling.js:255:20)
    at onDataFromClient (/home/me/opt/me/node_modules/transparent-proxy/core/onConnectedClientHandling.js:312:28)
    at emit (events:513:28)
    at addChunk (internal/streams/readable:324:12)
    at readableAddChunk (internal/streams/readable:297:9)
    at Readable.push (internal/streams/readable:234:10)
    at onStreamRead (internal/stream_base_commons:190:23)
    at callbackTrampoline (internal/async_hooks:130:17)
    --- TCPWRAP ---
    at init (internal/inspector_async_hook:25:19)
    at emitInitNative (internal/async_hooks:202:43)

There are now 4 chunks. Here are their relevant buffer data converted to string hex: Buffer1: 1fefbfbd0800000000000000

Buffer2: 0cefbfbdefbfbd6eefbfbd400000efbfbd7fefbfbd4a24623aefbfbdefbfbdefbfbd1aefbfbd30efbfbdefbfbd2a07efbfbdefbfbd0e6526cabfefbfbdefbfbdefbfbd21efbfbd61efbfbd610cefbfbdefbfbdefbfbdefbfbd3fefbfbdefbfbd352f2defbfbdefbfbdefbfbd3f4416c398efbfbd2222efbfbd15efbfbd514eefbfbd5e60efbfbd1dd280efbfbd79efbfbdefbfbd297d64efbfbdefbfbd61efbfbdefbfbd25efbfbd33efbfbd500aefbfbdefbfbdefbfbd1aefbfbd0f39efbfbdefbfbd7defbfbd022355db83efbfbdefbfbdefbfbdefbfbd30efbfbdefbfbd4aefbfbd0254efbfbd5b25efbfbdefbfbd7613efbfbd23efbfbdefbfbdefbfbd1befbfbd3befbfbdefbfbd73efbfbd01320274efbfbd79efbfbd78efbfbd063366efbfbdefbfbd4e70efbfbdefbfbd3fefbfbdefbfbdefbfbd3befbfbd2befbfbd4fefbfbd2a5e557257efbfbdefbfbdefbfbd76efbfbd40156a5d292c0eefbfbd243c443cefbfbdefbfbdefbfbdefbfbd71efbfbd656b1575efbfbd14643e4cefbfbd4b5470efbfbdefbfbd01efbfbd1defbfbdefbfbd50efbfbd2befbfbd69efbfbd1208efbfbd5870627fefbfbd27064aefbfbd62efbfbd40efbfbdefbfbdefbfbd10efbfbdefbfbdefbfbd04efbfbdefbfbdefbfbd4452efbfbdefbfbdefbfbd3d6cefbfbdefbfbd517a14efbfbd48efbfbdefbfbd45efbfbdefbfbd0b6965efbfbd57d789efbfbd7049efbfbd6d51437c29efbfbdefbfbde89a81efbfbd4b59efbfbdefbfbdefbfbdefbfbd285847cfa9c99b21efbfbdefbfbd0aefbfbd371c502cefbfbdefbfbd1e0defbfbd3d270befbfbdefbfbd43efbfbd15efbfbd53efbfbd4eefbfbdefbfbd7defbfbd5030debeefbfbd73efbfbdefbfbd1fefbfbdefbfbdefbfbdefbfbdefbfbd1cefbfbdefbfbd2f2eefbfbdd395124d0b4113efbfbdefbfbdefbfbd2c27efbfbdefbfbd0cd5bc60efbfbd544aefbfbdefbfbd29efbfbd1310463315de8befbfbd566befbfbd04efbfbdefbfbdefbfbdd6b1efbfbd492d6036791e7befbfbdefbfbdc892efbfbd03efbfbd5b1eefbfbdc2b0efbfbd7cefbfbd21ddacefbfbd1a7cefbfbd19390d7cefbfbdefbfbdefbfbd5c67efbfbd67efbfbdefbfbd3e50efbfbdefbfbd60efbfbd26efbfbd4c1b0defbfbd74c3867b7aefbfbdefbfbdefbfbdefbfbdefbfbdcf8d371d73efbfbd5b1defbfbd260aefbfbdefbfbdefbfbd0fefbfbdefbfbdefbfbdefbfbd0f0000efbfbdefbfbd

Buffer3: 0300efbfbd667353020000

Buffer4: ''

confuciussayuhm commented 1 year ago

You might find this relevant. The header bytes starting in buffer1 should start with 1f 8b for the payload to be valid gzip. Furthermore, there are various bytes that follow that detail compression, timestamp, etc.

gr3p1p3 commented 1 year ago

Ok, I made a mistake with encoding.

It is solved with this commit. Download the version @1.12.9 and let me know :)

confuciussayuhm commented 1 year ago

The response decodes! Party! Something strange though (and perhaps I'm just doing a stupid), the last response passes through transparent-proxy to the client before hitting the zlib.gunzip() function. Here is a snippet from my code:

if (session.response.headers["content-encoding"] === "gzip") {
    const zlib = require("zlib");
    zlib.gunzip(session.rawResponse, (err, decoded) => {
        if (err) throw new Error(err);
        // console.log(decoded);
        session._response.body = decoded.toString();
    });
    if (session._response.body.match(/(results)/)) {
        const response_data = JSON.parse(session._response.body);

I have breakpoints on session._response.body = decoded.toString(); and if (session._response.body.match(/(results)/)) {. The breakpoint if (session._response.body.match(/(results)/)) { is hit before the session._response.body = decoded.toString(); breakpoint. When I continue execution from if (session._response.body.match(/(results)/)) { the client receives the response. Then within the debugger the breakpoint session._response.body = decoded.toString(); is hit.

gr3p1p3 commented 1 year ago

You have to use promise to do this! :)

confuciussayuhm commented 1 year ago

Facepalm. Thanks. I've used zlib.gunzipSync() instead. Got a new error:

Error: invalid stored block lengths
    at Zlib.zlibOnError [as onerror] (/home/me/opt/me/lib/zlib.js:189:17)
    at Zlib.callbackTrampoline (/home/me/opt/me/lib/internal/async_hooks.js:130:17)
    at processChunkSync (/home/me/opt/me/lib/zlib.js:457:12)
    at zlibBufferSync (/home/me/opt/me/lib/zlib.js:178:12)
    at Object.syncBufferWrapper [as gunzipSync] (/home/me/opt/me/lib/zlib.js:792:14)
    at injectResponse (/home/me/opt/me/me.js:380:36)
    at TLSSocket.onDataFromUpstream (/home/me/opt/me/node_modules/transparent-proxy/core/onConnectedClientHandling.js:103:29)
    at TLSSocket.emit (/home/me/opt/me/lib/events.js:513:28)
    at addChunk (node:internal/streams/readable:324:12) {errno: -3, code: 'Z_DATA_ERROR', stack: 'Error: invalid stored block lengths
    at Zl…Chunk (node:internal/streams/readable:324:12)', message: 'invalid stored block lengths'}

This is what the response body looks like passed to the client:

{"oprstatus":0,"results":[{"data":"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"}]}
gr3p1p3 commented 1 year ago

Ok, it coudn't be so easy!

This is fixed with the version @1.12.15.

confuciussayuhm commented 1 year ago

I've given the new version a go. Got a new error:

Error: unexpected end of file
    at Zlib.zlibOnError [as onerror] (/home/me/opt/me/lib/zlib.js:189:17)
    at Zlib.callbackTrampoline (/home/me/opt/me/lib/internal/async_hooks.js:130:17)
    at processChunkSync (/home/me/opt/me/lib/zlib.js:457:12)
    at zlibBufferSync (/home/me/opt/me/lib/zlib.js:178:12)
    at Object.syncBufferWrapper [as gunzipSync] (/home/me/opt/me/lib/zlib.js:792:14)
    at injectResponse (/home/me/opt/me/me.js:375:36)
    at TLSSocket.onDataFromUpstream (/home/me/opt/me/node_modules/transparent-proxy/core/onConnectedClientHandling.js:103:29)
    at TLSSocket.emit (/home/me/opt/me/lib/events.js:513:28)
    at addChunk (node:internal/streams/readable:324:12) {errno: -5, code: 'Z_BUF_ERROR', stack: 'Error: unexpected end of file
    at Zlib.zli…Chunk (node:internal/streams/readable:324:12)', message: 'unexpected end of file'}

This is what the response body looks like passed to the client:

{"oprstatus":0,"results":[{"data":"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"}]}
gr3p1p3 commented 1 year ago

Can you show me your code in injectResponse-Callback? My test works with the new object as well

confuciussayuhm commented 1 year ago

Sure. Can you share a handle to an out-of-band DM platform?

gr3p1p3 commented 1 year ago

Sure. Can you share a handle to an out-of-band DM platform?

No sorry.

confuciussayuhm commented 1 year ago

Ok. The error occurs on the second line when receiving a "large" response from the server:

const zlib = require("zlib");
session._response.body = zlib.gunzipSync(session.rawResponse).toString();
gr3p1p3 commented 1 year ago

I tested your big string with the test that you can find here https://github.com/gr3p1p3/transparent-proxy/blob/master/test.js#L389 and it works perfectly.

Did you decode it after session.response.complete is set to true?

Edit: Have a look here https://stackoverflow.com/a/70314112

gr3p1p3 commented 1 year ago

News? @confuciussayuhm

confuciussayuhm commented 1 year ago

Howzit @gr3p1p3. I need to build a PoC that serves the same chunked server response to you that I am getting so you can debug. You've put some fire under me to get this done. My session.response.complete is true.

confuciussayuhm commented 1 year ago

Howzit @gr3p1p3. I'm back at this again. I see the error I am getting is back to the Z_DATA_ERROR:

Error: incorrect header check
    at Zlib.zlibOnError [as onerror] (/home/bob/opt/splat/lib/zlib.js:189:17)
    at Zlib.callbackTrampoline (/home/bob/opt/splat/lib/internal/async_hooks.js:130:17)
    at processChunkSync (/home/bob/opt/splat/lib/zlib.js:457:12)
    at zlibBufferSync (/home/bob/opt/splat/lib/zlib.js:178:12)
    at Object.syncBufferWrapper [as gunzipSync] (/home/bob/opt/splat/lib/zlib.js:792:14)
    at injectResponse (/home/bob/opt/splat/splat.js:384:36)
    at TLSSocket.onDataFromUpstream (/home/bob/opt/splat/node_modules/transparent-proxy/core/onConnectedClientHandling.js:103:29)
    at TLSSocket.emit (/home/bob/opt/splat/lib/events.js:513:28)
    at addChunk (node:internal/streams/readable:324:12) {errno: -3, code: 'Z_DATA_ERROR', stack: 'Error: incorrect header check
    at Zlib.zli…Chunk (node:internal/streams/readable:324:12)', message: 'incorrect header check'}

Further to this, the app prints more errors:

Process exited with code 1
Uncaught Error Error: incorrect header check
    at __node_internal_genericNodeError (internal/errors:868:15)
    at zlibOnError (zlib:189:17)
    at callbackTrampoline (internal/async_hooks:130:17)
    --- TickObject ---
    at init (internal/inspector_async_hook:25:19)
    at emitInitNative (internal/async_hooks:202:43)
    at emitInitScript (internal/async_hooks:505:3)
    at nextTick (internal/process/task_queues:132:5)
    at onDestroy (internal/streams/destroy:103:15)
    at ZlibBase._destroy (zlib:409:3)
    at _destroy (internal/streams/destroy:109:10)
    at destroy (internal/streams/destroy:71:5)
    at zlibOnError (zlib:192:8)
    at callbackTrampoline (internal/async_hooks:130:17)
    --- ZLIB ---
    at init (internal/inspector_async_hook:25:19)
    at emitInitNative (internal/async_hooks:202:43)
    at Zlib (zlib:682:18)
    at Gunzip (zlib:759:3)
    at asyncBufferWrapper (zlib:800:23)
    at injectResponse (/home/bob/opt/splat/splat.js:377:11)
    at onDataFromUpstream (/home/bob/opt/splat/node_modules/transparent-proxy/core/onConnectedClientHandling.js:103:29)
    at emit (events:513:28)
    at addChunk (internal/streams/readable:324:12)
    at readableAddChunk (internal/streams/readable:297:9)
    at Readable.push (internal/streams/readable:234:10)
    at onStreamRead (internal/stream_base_commons:190:23)
    at callbackTrampoline (internal/async_hooks:130:17)
    --- TLSWRAP ---
    at init (internal/inspector_async_hook:25:19)
    at emitInitNative (internal/async_hooks:202:43)
    at TLSSocket._wrapHandle (_tls_wrap:623:24)
    at TLSSocket (_tls_wrap:523:18)
    at _updateSockets (/home/bob/opt/splat/node_modules/transparent-proxy/core/Session.js:329:31)
    at updateSockets (/home/bob/opt/splat/node_modules/transparent-proxy/core/onConnectedClientHandling.js:151:24)
    at onDataFromUpstream (/home/bob/opt/splat/node_modules/transparent-proxy/core/onConnectedClientHandling.js:108:17)
    at processTicksAndRejections (internal/process/task_queues:95:5)
    --- await ---
    at processTicksAndRejections (internal/process/task_queues:95:5)
    --- await ---
    at emit (events:513:28)
    at addChunk (internal/streams/readable:324:12)
    at readableAddChunk (internal/streams/readable:297:9)
    at Readable.push (internal/streams/readable:234:10)
    at onStreamRead (internal/stream_base_commons:190:23)
    at callbackTrampoline (internal/async_hooks:130:17)
    --- TCPWRAP ---
    at init (internal/inspector_async_hook:25:19)
    at emitInitNative (internal/async_hooks:202:43)
    at Socket.connect (net:1169:7)
    at connect (net:242:17)
    at prepareTunnel (/home/bob/opt/splat/node_modules/transparent-proxy/core/onConnectedClientHandling.js:241:40)
    at processTicksAndRejections (internal/process/task_queues:95:5)
    --- await ---
    at handleProxyTunnel (/home/bob/opt/splat/node_modules/transparent-proxy/core/onConnectedClientHandling.js:260:20)
    at onDataFromClient (/home/bob/opt/splat/node_modules/transparent-proxy/core/onConnectedClientHandling.js:322:28)
    at emit (events:513:28)
    at addChunk (internal/streams/readable:324:12)
    at readableAddChunk (internal/streams/readable:297:9)
    at Readable.push (internal/streams/readable:234:10)
    at onStreamRead (internal/stream_base_commons:190:23)
    at callbackTrampoline (internal/async_hooks:130:17)
    --- TCPWRAP ---
    at init (internal/inspector_async_hook:25:19)
    at emitInitNative (internal/async_hooks:202:43)

There are 8 chunks in this server response:

session._rawResponseBodyChunks[0].toString('hex')
'55358081e75f30fa9190bbbcace2f2a230b3f8a0273f19a4d7dc5549c141e632090c4be0a2a1a6f67a783b5e3c794a88e20eefb13a19b5116816e74eb6c35c344b3f9acf3df3614199d7bad9401cf279f0ab6cb2d091fa357fb1ecf6a59da3a1cd307a520eed66697199aa02d0df96fd72926f883e855154b1763ef523ba1427e0330b49ba145ee41e3e734dfd8265089b4d66d76a36e636b44b2a9978d847663531bfe34cf12244e64d7a27b3620abcc0fcdc8ec0d4efcc174faed4bd4de802e0369ebed82905562f631c0d09ce95833aa3cd1e14bf831a5a82f47be654bfecb6eee7139d88b96184e296513c520bc8af19d1b479aa993bf64e38ed76dd2912af'
session._rawResponseBodyChunks[1].toString('hex')
'0c788670d8143ee9481439ffecc37301b0a0da9be09ba94a15d30465dfe64dda7bb009ee7240e77e3b6df71ad151240d2954535053adab9e25777eb886672e41b006541be13a84535238454dd1e314abc0e63899f26c169eef7617d2ce0d761578fab2e1b749e33313cd7961d7795f8e52bec0cde83bd77f79de5c228efdf5baa19bf727f3b28e5e8e4458c1206ba61d7251dc3dc426cfaeb6eda330d37d968f27608b3ae8d7e7df51eeb3de5b3b90e24c2dd9f7749da6fd2bcfccafab1bbb739e4a37f3cf089b988ba4a134c6e0975693b744ba3d9a46352b7ebdb48c0d531eee5cf92e4a0e1b95a0655e235af4e5497c588cbafc88085524e38418498468'
session._rawResponseBodyChunks[2].toString('hex')
'82455424cfa819ddd7c0d9794fe1756c0905e036a3abf57403fcb56df307080e2bcc332a4bf560dfc20d6ca177f6ec19cd62ab113f72ef48d3c906e7c3cd4c4bcef9a9f6583444eb2e2f24a5074197152ad468e6743d2f350c290c50114537cabb8792faa30f15fb48f776600e81cbbfa7a46d56b6afb52c952c076711cd4f990776c413e8ea7d04ff7ae2fe806314d84a98b26a2b3cd1ad85ee597f73743f820e8c6b080aa1347f980fa36632c0188546e704b6126fb4b940fb8a7b1bb89692ffa0fb65bc807beb18f2588af128663814e08521ea3327f9fddd3d586c33e29cb7ac5f95e5c103b722d1336c9fd86c59b97340f06b8de6c79bdbf8d244072e3e6bfee53fb9ba9af8f5f8c44da0486c562528140c9ca85fe3ba27c73d8199f63714bd2fde73f7ef7af8f133974421cb6d15c72787b8f69c7f02c2ce7786a128344a24ef2566731606327eed1772bf09fac9affa62d3f8ed11642f978fbf562507bc18e95236ce5acc6d5cf41c71de657b635b8c33af51fa02bc6bb4ecb2bd1eac1722960e840c3ec7987c2ed7e038df2169fae1d199f1a96ec99a3430f7880ad9aef1337026f2f72d867b75e16f1d164392e798a27e0f7058bed5d09082bbd1418b33c1f20351aebea1e9ebb9a8037edfa682035c2049b43ba59f6ae04837c7a908ac6b0651'
session._rawResponseBodyChunks[3].toString('hex')
'77fd2193b4ce92333f89dc07868453e3cd6391b7b7f8d9132d55ebee680f08df5da696bd5d6e51b73853e6ab5a69426b3c83a2'
session._rawResponseBodyChunks[4].toString('hex')
'1a0d05ed6f2466f97e4fa36f5debf5f77c01960f1a95d9cb17c62ede917aa87cd9a3bc24880a03b19e1801e231c2f9e9636994074f48e6797d19f68c4e4626970fc410bfc3f7768424d81e74f29200bee7e1389479d247b029815e6d20e97d63c6535ba5812fa3b50fa0b51538aaaf74fcff6adc8616aea169a24a184f43fa905144eb556d5acd22348f1a806cc933159d67142396e23af90dc788c73d6a73969dbe01902e77addaf7900c363d5b06bade952ee6b5b961d6dfd04644112b1420286f753e557849d68b35b6482299ccfc3697782b33f911197c948e39fc563458698bfb4bd2813d990c085bf62d52ee82ba5a7a0cf2cdb2ff0f18e0c8890f1307d5e9b4d33222138980cbf5352b70f5a63cdb2fe2cd603222fd'
session._rawResponseBodyChunks[5].toString('hex')
'a50a7e5018eaf403b5b7e7d4d76fb6d282bcd3d9e9c531ff6e105f812ead37df4b56354bd2e01c0234aae46967f488ee0bc8ddc7166af50d4e3c57435e4b59d39e798554a95ad7cf9026f04a41e901a0d20a15fdc1fa24f1cbc702ab729f945d0aea5197ca007516dcbec95382d39aeb2d244a6a2807175e404765b4f03fbfa43ab409c920837cef0dbc7447fd79602e7534230e18106c19d847197bb350bb0f09714952a105b17c9eb6a752b4c24282047b820db8c158e290a9ee55fbfe02935f0c946bbf1dc6364db5f0d0f766e5dd1c3dfb732bd483ef32d383e2a5612da50d03a63e0f9fc61bae967554b345fd8eb6ce67bbbd07a04286b68c37326860128f3426cfb870bd04967b150b94be2bda13bef82143da4d5da89e9930d7b2095f3e42a6d97b9e96257b70bf848cd252858dd558907e009fe53c8e954d0f325fe5223c00bcb903f5767f8562c0de9ccdb992d19cff1d659b2412338f6a5ceac7ddf4f6f27332379b35695ea64d46c2eacf6a7ff68c7d73e7e4275655be967bd85bc801f8'
session._rawResponseBodyChunks[6].toString('hex')
'b01ab7d4332d33df6194b6cf31c5f49ba54e93d427658ca8e7c953dd9e9373c8d08220a87d7ea9182d61f82747decc7d4f5836b03e1b1be5f01bf64786971f38c9db3611ebe51e2d8f70cb2dbc7986951f0920acb6b8ff8e76d32fe2234a2b0417cc'
session._rawResponseBodyChunks[7].toString('hex')
'0300be62509413a40000'

You can duplicate this error with the following:

let buf0 = Buffer.from("55358081e75f30fa9190bbbcace2f2a230b3f8a0273f19a4d7dc5549c141e632090c4be0a2a1a6f67a783b5e3c794a88e20eefb13a19b5116816e74eb6c35c344b3f9acf3df3614199d7bad9401cf279f0ab6cb2d091fa357fb1ecf6a59da3a1cd307a520eed66697199aa02d0df96fd72926f883e855154b1763ef523ba1427e0330b49ba145ee41e3e734dfd8265089b4d66d76a36e636b44b2a9978d847663531bfe34cf12244e64d7a27b3620abcc0fcdc8ec0d4efcc174faed4bd4de802e0369ebed82905562f631c0d09ce95833aa3cd1e14bf831a5a82f47be654bfecb6eee7139d88b96184e296513c520bc8af19d1b479aa993bf64e38ed76dd2912af", "hex");
let buf1 = Buffer.from("0c788670d8143ee9481439ffecc37301b0a0da9be09ba94a15d30465dfe64dda7bb009ee7240e77e3b6df71ad151240d2954535053adab9e25777eb886672e41b006541be13a84535238454dd1e314abc0e63899f26c169eef7617d2ce0d761578fab2e1b749e33313cd7961d7795f8e52bec0cde83bd77f79de5c228efdf5baa19bf727f3b28e5e8e4458c1206ba61d7251dc3dc426cfaeb6eda330d37d968f27608b3ae8d7e7df51eeb3de5b3b90e24c2dd9f7749da6fd2bcfccafab1bbb739e4a37f3cf089b988ba4a134c6e0975693b744ba3d9a46352b7ebdb48c0d531eee5cf92e4a0e1b95a0655e235af4e5497c588cbafc88085524e38418498468", "hex");
let buf2 = Buffer.from("82455424cfa819ddd7c0d9794fe1756c0905e036a3abf57403fcb56df307080e2bcc332a4bf560dfc20d6ca177f6ec19cd62ab113f72ef48d3c906e7c3cd4c4bcef9a9f6583444eb2e2f24a5074197152ad468e6743d2f350c290c50114537cabb8792faa30f15fb48f776600e81cbbfa7a46d56b6afb52c952c076711cd4f990776c413e8ea7d04ff7ae2fe806314d84a98b26a2b3cd1ad85ee597f73743f820e8c6b080aa1347f980fa36632c0188546e704b6126fb4b940fb8a7b1bb89692ffa0fb65bc807beb18f2588af128663814e08521ea3327f9fddd3d586c33e29cb7ac5f95e5c103b722d1336c9fd86c59b97340f06b8de6c79bdbf8d244072e3e6bfee53fb9ba9af8f5f8c44da0486c562528140c9ca85fe3ba27c73d8199f63714bd2fde73f7ef7af8f133974421cb6d15c72787b8f69c7f02c2ce7786a128344a24ef2566731606327eed1772bf09fac9affa62d3f8ed11642f978fbf562507bc18e95236ce5acc6d5cf41c71de657b635b8c33af51fa02bc6bb4ecb2bd1eac1722960e840c3ec7987c2ed7e038df2169fae1d199f1a96ec99a3430f7880ad9aef1337026f2f72d867b75e16f1d164392e798a27e0f7058bed5d09082bbd1418b33c1f20351aebea1e9ebb9a8037edfa682035c2049b43ba59f6ae04837c7a908ac6b0651", "hex");
let buf3 = Buffer.from("77fd2193b4ce92333f89dc07868453e3cd6391b7b7f8d9132d55ebee680f08df5da696bd5d6e51b73853e6ab5a69426b3c83a2", "hex");
let buf4 = Buffer.from("1a0d05ed6f2466f97e4fa36f5debf5f77c01960f1a95d9cb17c62ede917aa87cd9a3bc24880a03b19e1801e231c2f9e9636994074f48e6797d19f68c4e4626970fc410bfc3f7768424d81e74f29200bee7e1389479d247b029815e6d20e97d63c6535ba5812fa3b50fa0b51538aaaf74fcff6adc8616aea169a24a184f43fa905144eb556d5acd22348f1a806cc933159d67142396e23af90dc788c73d6a73969dbe01902e77addaf7900c363d5b06bade952ee6b5b961d6dfd04644112b1420286f753e557849d68b35b6482299ccfc3697782b33f911197c948e39fc563458698bfb4bd2813d990c085bf62d52ee82ba5a7a0cf2cdb2ff0f18e0c8890f1307d5e9b4d33222138980cbf5352b70f5a63cdb2fe2cd603222fd", "hex");
let buf5 = Buffer.from("a50a7e5018eaf403b5b7e7d4d76fb6d282bcd3d9e9c531ff6e105f812ead37df4b56354bd2e01c0234aae46967f488ee0bc8ddc7166af50d4e3c57435e4b59d39e798554a95ad7cf9026f04a41e901a0d20a15fdc1fa24f1cbc702ab729f945d0aea5197ca007516dcbec95382d39aeb2d244a6a2807175e404765b4f03fbfa43ab409c920837cef0dbc7447fd79602e7534230e18106c19d847197bb350bb0f09714952a105b17c9eb6a752b4c24282047b820db8c158e290a9ee55fbfe02935f0c946bbf1dc6364db5f0d0f766e5dd1c3dfb732bd483ef32d383e2a5612da50d03a63e0f9fc61bae967554b345fd8eb6ce67bbbd07a04286b68c37326860128f3426cfb870bd04967b150b94be2bda13bef82143da4d5da89e9930d7b2095f3e42a6d97b9e96257b70bf848cd252858dd558907e009fe53c8e954d0f325fe5223c00bcb903f5767f8562c0de9ccdb992d19cff1d659b2412338f6a5ceac7ddf4f6f27332379b35695ea64d46c2eacf6a7ff68c7d73e7e4275655be967bd85bc801f8", "hex");
let buf6 = Buffer.from("b01ab7d4332d33df6194b6cf31c5f49ba54e93d427658ca8e7c953dd9e9373c8d08220a87d7ea9182d61f82747decc7d4f5836b03e1b1be5f01bf64786971f38c9db3611ebe51e2d8f70cb2dbc7986951f0920acb6b8ff8e76d32fe2234a2b0417cc", "hex");
let buf7 = Buffer.from("0300be62509413a40000", "hex");

let buf_array = [buf0, buf1, buf2, buf3, buf4, buf5, buf6, buf7]
let final_buf = Buffer.concat(buf_array)

const zlib = require("zlib");
let test = {}
test = zlib.gunzipSync(final_buf).toString();
console.log(test)
gr3p1p3 commented 1 year ago

I revisited the http-parsing using http-native-server and client. Try with new version 1.15.0 and let me know!

confuciussayuhm commented 1 year ago

I get a crash on HttpMirro.js:113 with the following:

Process exited with code 1
Uncaught Error Error: connect ECONNRESET ::1:35777
    at __node_internal_captureLargerStackTrace (internal/errors:491:5)
    at __node_internal_exceptionWithHostPort (internal/errors:669:12)
    at afterConnect (net:1481:16)
    at callbackTrampoline (internal/async_hooks:130:17)
    --- TickObject ---
    at init (internal/inspector_async_hook:25:19)
    at emitInitNative (internal/async_hooks:202:43)
    at emitInitScript (internal/async_hooks:505:3)
    at nextTick (internal/process/task_queues:132:5)
    at onDestroy (internal/streams/destroy:103:15)
    at Socket._destroy (net:810:5)
    at _destroy (internal/streams/destroy:109:10)
    at destroy (internal/streams/destroy:71:5)
    at afterConnect (net:1490:10)
    at callbackTrampoline (internal/async_hooks:130:17)
    --- TCPCONNECTWRAP ---
    at init (internal/inspector_async_hook:25:19)
    at emitInitNative (internal/async_hooks:202:43)
    at internalConnect (net:1043:26)
    at defaultTriggerAsyncIdScope (internal/async_hooks:464:18)
    at <anonymous> (net:1244:9)
    at processTicksAndRejections (internal/process/task_queues:77:11)
    --- TickObject ---
    at init (internal/inspector_async_hook:25:19)
    at emitInitNative (internal/async_hooks:202:43)
    at emitInitScript (internal/async_hooks:505:3)
    at nextTick (internal/process/task_queues:132:5)
    at defaultTriggerAsyncIdScope (internal/async_hooks:464:18)
    at lookupAndConnect (net:1242:5)
    at Socket.connect (net:1187:5)
    at connect (net:242:17)
    at createSocket (_http_agent:350:26)
    at addRequest (_http_agent:297:10)
    at ClientRequest (_http_client:337:16)
    at request (http:97:10)
    at <anonymous> (/home/bob/opt/splat/node_modules/transparent-proxy/core/HttpMirror.js:113:22)
    at waitForResponse (/home/bob/opt/splat/node_modules/transparent-proxy/core/HttpMirror.js:101:16)
    at sendToMirror (/home/bob/opt/splat/node_modules/transparent-proxy/core/Session.js:156:57)
    at processTicksAndRejections (internal/process/task_queues:95:5)
    --- await ---
    at onDataFromUpstream (/home/bob/opt/splat/node_modules/transparent-proxy/core/onConnectedClientHandling.js:101:34)
    at emit (events:513:28)
    at addChunk (internal/streams/readable:324:12)
    at readableAddChunk (internal/streams/readable:297:9)
    at Readable.push (internal/streams/readable:234:10)
    at onStreamRead (internal/stream_base_commons:190:23)
    at callbackTrampoline (internal/async_hooks:130:17)
    --- TLSWRAP ---
    at init (internal/inspector_async_hook:25:19)
    at emitInitNative (internal/async_hooks:202:43)
    at TLSSocket._wrapHandle (_tls_wrap:623:24)
    at TLSSocket (_tls_wrap:523:18)
    at _updateSockets (/home/bob/opt/splat/node_modules/transparent-proxy/core/Session.js:262:31)
    at updateSockets (/home/bob/opt/splat/node_modules/transparent-proxy/core/onConnectedClientHandling.js:151:24)
    at onDataFromUpstream (/home/bob/opt/splat/node_modules/transparent-proxy/core/onConnectedClientHandling.js:108:17)
    at processTicksAndRejections (internal/process/task_queues:95:5)
    --- await ---
    at processTicksAndRejections (internal/process/task_queues:95:5)
    --- await ---
    at processTicksAndRejections (internal/process/task_queues:95:5)
    --- await ---
    at emit (events:513:28)
    at addChunk (internal/streams/readable:324:12)
    at readableAddChunk (internal/streams/readable:297:9)
    at Readable.push (internal/streams/readable:234:10)
    at onStreamRead (internal/stream_base_commons:190:23)
    at callbackTrampoline (internal/async_hooks:130:17)
    --- TCPWRAP ---
    at init (internal/inspector_async_hook:25:19)
    at emitInitNative (internal/async_hooks:202:43)
    at Socket.connect (net:1169:7)
    at connect (net:242:17)
    at prepareTunnel (/home/bob/opt/splat/node_modules/transparent-proxy/core/onConnectedClientHandling.js:242:40)
    at processTicksAndRejections (internal/process/task_queues:95:5)
    --- await ---
    at handleProxyTunnel (/home/bob/opt/splat/node_modules/transparent-proxy/core/onConnectedClientHandling.js:259:20)
    at onDataFromClient (/home/bob/opt/splat/node_modules/transparent-proxy/core/onConnectedClientHandling.js:318:28)
    at processTicksAndRejections (internal/process/task_queues:95:5)
    --- await ---
    at emit (events:513:28)
    at addChunk (internal/streams/readable:324:12)
    at readableAddChunk (internal/streams/readable:297:9)
    at Readable.push (internal/streams/readable:234:10)
    at onStreamRead (internal/stream_base_commons:190:23)
    at callbackTrampoline (internal/async_hooks:130:17)
    --- TCPWRAP ---
    at init (internal/inspector_async_hook:25:19)
    at emitInitNative (internal/async_hooks:202:43)

I haven't modified my code (apart from updating to the latest version of transparent-proxy). The connection to the upstream proxy works if I use curl or the browser directly.

confuciussayuhm commented 6 months ago

I think I found the problem to this working on another project: https://github.com/caido/caido/issues/844