Skip to content

Commit 2d794d9

Browse files
committed
fix(mitm): invalid header char bugs
1 parent 22900c4 commit 2d794d9

File tree

6 files changed

+10
-3
lines changed

6 files changed

+10
-3
lines changed

core/models/ResourcesTable.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ export default class ResourcesTable extends SqliteTable<IResourcesRecord> {
3939
['usedArtificialCache', 'INTEGER'],
4040
['didUserScriptBlockResource', 'INTEGER'],
4141
['requestOriginalHeaders', 'TEXT'],
42+
['responseOriginalHeaders', 'TEXT'],
4243
['httpError', 'TEXT'],
4344
['browserServedFromCache', 'TEXT'],
4445
['browserLoadFailure', 'TEXT'],
@@ -57,6 +58,7 @@ export default class ResourcesTable extends SqliteTable<IResourcesRecord> {
5758
socketId: number;
5859
redirectedToUrl?: string;
5960
originalHeaders: IResourceHeaders;
61+
responseOriginalHeaders?: IResourceHeaders;
6062
clientAlpn: string;
6163
dnsResolvedIp?: string;
6264
wasCached?: boolean;
@@ -114,6 +116,7 @@ export default class ResourcesTable extends SqliteTable<IResourcesRecord> {
114116
extras.wasCached ? 1 : 0,
115117
extras.didBlockResource ? 1 : 0,
116118
JSON.stringify(extras.originalHeaders ?? {}),
119+
JSON.stringify(extras.responseOriginalHeaders ?? {}),
117120
errorString,
118121
meta.response?.browserServedFromCache,
119122
meta.response?.browserLoadFailure,
@@ -174,6 +177,7 @@ export interface IResourcesRecord {
174177
didUserScriptBlockResource: boolean;
175178
isHttp2Push: boolean;
176179
requestOriginalHeaders: string;
180+
responseOriginalHeaders: string;
177181
httpError: string;
178182

179183
browserServedFromCache?: 'service-worker' | 'disk' | 'prefetch' | 'memory';

mitm/handlers/HeadersHandler.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ export default class HeadersHandler {
8484
continue;
8585
}
8686
// if going h2->h1->h2, strip http1 headers before responding to client
87-
if (ctx.isServerHttp2 === false && ctx.isClientHttp2) {
87+
if (ctx.isClientHttp2) {
8888
if (stripHttp1HeadersForH2.includes(canonizedKey.toLowerCase())) {
8989
continue;
9090
}

mitm/handlers/RequestSession.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -262,6 +262,7 @@ export interface IRequestSessionResponseEvent extends IRequestSessionRequestEven
262262
wasCached: boolean;
263263
dnsResolvedIp?: string;
264264
resourceType: ResourceType;
265+
responseOriginalHeaders?: IResourceHeaders;
265266
body: Buffer;
266267
redirectedToUrl?: string;
267268
executionMillis: number;

mitm/lib/MitmProxy.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ export default class MitmProxy {
5757

5858
this.db = new NetworkDb(options.sslCaDir);
5959
this.ca = new CertificateAuthority(this.db);
60-
this.httpServer = http.createServer();
60+
this.httpServer = http.createServer({ insecureHTTPParser: true });
6161
this.httpServer.on('connect', this.onHttpConnect.bind(this));
6262
this.httpServer.on('clientError', this.onClientError.bind(this, false));
6363
this.httpServer.on('request', this.onHttpRequest.bind(this, false));

mitm/lib/MitmRequestAgent.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,8 @@ export default class MitmRequestAgent {
5656
port: url.port || (ctx.isSSL ? 443 : 80),
5757
headers: ctx.requestHeaders,
5858
rejectUnauthorized: allowUnverifiedCertificates === false,
59-
};
59+
insecureHTTPParser: true, // if we don't include this setting, invalid characters in http requests will blow up responses
60+
} as any;
6061

6162
await this.assignSocket(ctx, requestSettings);
6263

mitm/lib/MitmRequestContext.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -198,6 +198,7 @@ export default class MitmRequestContext {
198198
localAddress: ctx.localAddress,
199199
dnsResolvedIp: ctx.dnsResolvedIp,
200200
originalHeaders: ctx.requestOriginalHeaders,
201+
responseOriginalHeaders: ctx.responseOriginalHeaders,
201202
socketId: ctx.proxyToServerMitmSocket?.id,
202203
clientAlpn: ctx.clientAlpn,
203204
serverAlpn: ctx.proxyToServerMitmSocket?.alpn,

0 commit comments

Comments
 (0)