Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 11 additions & 24 deletions src/squid-config-security.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,14 @@ import { SquidConfig } from './types';
describe('defense-in-depth: rejects injected values', () => {
const defaultPort = 3128;

const sslBumpBase = {
domains: ['evil.com'],
port: defaultPort,
sslBump: true as const,
caFiles: { certPath: '/tmp/cert.pem', keyPath: '/tmp/key.pem' },
sslDbPath: '/tmp/ssl_db',
} satisfies Partial<Parameters<typeof generateSquidConfig>[0]>;

it('should reject newline in domain via validateDomainOrPattern', () => {
expect(() => {
generateSquidConfig({
Expand All @@ -18,42 +26,21 @@ describe('defense-in-depth: rejects injected values', () => {
// The assertSafeForSquidConfig guard should catch this.
const maliciousPattern = 'https://evil.com/path\nhttp_access allow all';
expect(() => {
generateSquidConfig({
domains: ['evil.com'],
port: defaultPort,
sslBump: true,
caFiles: { certPath: '/tmp/cert.pem', keyPath: '/tmp/key.pem' },
sslDbPath: '/tmp/ssl_db',
urlPatterns: [maliciousPattern],
});
generateSquidConfig({ ...sslBumpBase, urlPatterns: [maliciousPattern] });
}).toThrow(/SECURITY/);
});

it('should reject hash character in URL pattern (Squid comment injection)', () => {
const maliciousPattern = 'https://evil.com/path#http_access allow all';
expect(() => {
generateSquidConfig({
domains: ['evil.com'],
port: defaultPort,
sslBump: true,
caFiles: { certPath: '/tmp/cert.pem', keyPath: '/tmp/key.pem' },
sslDbPath: '/tmp/ssl_db',
urlPatterns: [maliciousPattern],
});
generateSquidConfig({ ...sslBumpBase, urlPatterns: [maliciousPattern] });
}).toThrow(/SECURITY/);
});

it('should reject semicolon in URL pattern (Squid token injection)', () => {
const maliciousPattern = 'https://evil.com/path;injected';
expect(() => {
generateSquidConfig({
domains: ['evil.com'],
port: defaultPort,
sslBump: true,
caFiles: { certPath: '/tmp/cert.pem', keyPath: '/tmp/key.pem' },
sslDbPath: '/tmp/ssl_db',
urlPatterns: [maliciousPattern],
});
generateSquidConfig({ ...sslBumpBase, urlPatterns: [maliciousPattern] });
}).toThrow(/SECURITY/);
});

Expand Down
Loading