Vulnerabilitas Session pada Wrapper Tidak Resmi Claude API
Proyek reverse-engineered seperti LinXiaoTao/FuckClaude dan wrapper sejenis umumnya mengeksploitasi endpoint web Claude internal (bukan API enterprise resmi Anthropic) dengan mengekstrak sessionKey atau cookie sesi web aktif. Pola ini memicu celah keamanan kritis: cookie-based impersonation dan token extraction.
Ketika session key statis bocor atau di-hardcode pada client, penyerang dapat membajak seluruh konteks sesi percakapan, menguras kuota rate limit, atau memicu pemblokiran akun oleh sistem anti-bot Cloudflare. Tanpa perlindungan backend, server upstream memperlakukan setiap request yang membawa cookie valid sebagai sesi terautentikasi.
Vektor Serangan Utama
- Session Token Extraction: Pengambilan token autentikasi
sessionKeydari inspect tool browser atau memory injection, lalu didistribusikan tanpa mekanisme invalidasi otomatis. - Cookie Impersonation: Replay request HTTP langsung ke endpoint internal Claude tanpa rotasi context session ID.
- Bypass Anti-Bot: Eksploitasi header browser standar (seperti
User-Agentdansec-ch-ua) palsu untuk mengelabui kontrol TLS dan fingerprinting web.
Strategi Pertahanan: Header Guard dan Token Rotation
Untuk mengamankan integrasi, backend harus berfungsi sebagai reverse proxy guard. Proxy ini memegang kredensial asli upstream, menolak direct-client access, dan menerapkan tiga pilar keamanan:
- Token Rotation Berkala: Hindari pemakaian satu session key jangka panjang. Lakukan refresh token atau rotasi session pool secara terprogram.
- Header Sanitization: Hapus header berbahaya dari client seperti
Host,X-Forwarded-Foryang tidak terpercaya, dan set header upstream Claude yang konsisten. - HMAC Payload Signing: Pastikan integritas payload dari client internal Anda untuk mencegah replay attack pihak ketiga.
Implementasi Proxy Request Guard di TypeScript
Berikut adalah implementasi minimal backend guard menggunakan runtime TypeScript (Node.js/Bun) untuk memvalidasi HMAC, menyaring header, dan melakukan rotasi session upstream.
import { createHmac, timingSafeEqual } from "node:crypto";
interface ProxyConfig {
hmacSecret: string;
sessionPool: string[];
}
export class ClaudeSessionGuard {
private sessions: string[];
private currentIndex: number = 0;
private hmacSecret: string;
constructor(config: ProxyConfig) {
if (!config.sessionPool.length) {
throw new Error("Session pool cannot be empty");
}
this.sessions = config.sessionPool;
this.hmacSecret = config.hmacSecret;
}
// ponytail: Round-robin sederhana. Upgrade ke dynamic lease management jika concurrency tinggi.
public getRotatedSession(): string {
const session = this.sessions[this.currentIndex];
this.currentIndex = (this.currentIndex + 1) % this.sessions.length;
return session;
}
public verifyClientSignature(signature: string, timestamp: string, body: string): boolean {
const now = Math.floor(Date.now() / 1000);
const reqTime = parseInt(timestamp, 10);
// Replay attack window: maksimal 60 detik
if (Number.isNaN(reqTime) || Math.abs(now - reqTime) > 60) {
return false;
}
const hmac = createHmac("sha256", this.hmacSecret);
hmac.update(`${timestamp}.${body}`);
const expected = hmac.digest();
const provided = Buffer.from(signature, "hex");
return expected.length === provided.length && timingSafeEqual(expected, provided);
}
public sanitizeUpstreamHeaders(clientHeaders: Record<string, string | undefined>): Record<string, string> {
const activeSession = this.getRotatedSession();
// Hapus header berbahaya dan standarisasi header browser
return {
"Accept": "application/json",
"Content-Type": "application/json",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36",
"Cookie": `sessionKey=${activeSession}`,
"Origin": "https://claude.ai",
"Referer": "https://claude.ai/chats"
};
}
}
TLS Fingerprinting Guard
Scraping engine berbasis cURL atau fetch standar Node.js memiliki fingerprint TLS (JA3/JA4) yang mudah diidentifikasi dan diblokir oleh upstream WAF (seperti Cloudflare). Ketika merancang backend forwarding:
- Gunakan TLS fingerprinting middleware di level edge (misal: Cloudflare Workers, Nginx dengan modul JA3) untuk memblokir client tidak sah sebelum menyentuh Node.js.
- Jika memforward request upstream, gunakan HTTP client yang mendukung TLS spoofing atau isolasi routing HTTP/2 via connection pool terkontrol untuk mempertahankan karakteristik browser asli.
- Periksa headers order: Claude upstream mendeteksi urutan pseudo-headers (
:method,:authority,:scheme,:path) pada HTTP/2. Forwarder wajib mempertahankan urutan headers standar Chromium.
Batasan dan Rekomendasi Arsitektural
Solusi mitigasi berbasis wrapping web session memiliki trade-off inheren. Session token dapat di-invalidate secara sepihak oleh sistem proteksi upstream sewaktu-waktu. Untuk beban kerja produksi, hindari session hijacking wrapper dan beralihlah ke Claude API resmi dari Anthropic Console yang menggunakan autentikasi x-api-key standar dengan SLA, audit log, dan isolasi keamanan enterprise.
Komentar
0 komentar
Masuk ke akun kamu untuk ikut berkomentar.
Belum ada komentar
Jadilah yang pertama ikut berdiskusi!