Skip to content

fix(security): env secret-leak hardening — bracket→dot + release scan guard#73

Open
selimmujdeci wants to merge 2 commits into
mainfrom
fix/env-secret-hardening
Open

fix(security): env secret-leak hardening — bracket→dot + release scan guard#73
selimmujdeci wants to merge 2 commits into
mainfrom
fix/env-secret-hardening

Conversation

@selimmujdeci

Copy link
Copy Markdown
Owner

Amaç

Gizli AI anahtarlarinin (Gemini/Claude/Groq/xAI) derlenmis release bundle'a
sizmasini yapisal olarak engelle. Guncel .env zaten temiz; bu PR sizinti
vektorunu
kapatir ve son savunma olarak release-bundle secret taramasi ekler.

Kok neden

import.meta.env['VITE_...'] bracket (dinamik) erisimi Vite'in per-key statik
degistirmesini kirip tum env objesini bundle'a serialize ediyordu. Sonuc: .env'e
konan her gizli anahtar dagitilan APK'ya literal gomulurdu (decompile ile 30sn'de cikar).

Degisiklikler

Dosya Ne
src/platform/aiVoiceService.ts getEnv{Gemini,Haiku,Groq}Key -> statik NOKTA erisimi
src/platform/media/mediaCredentials.ts dinamik env[name] -> acik per-provider nokta erisimi
scripts/scan-secrets.mjs release bundle gercek-anahtar-sekilli literal tarayici
.github/workflows/main.yml build job'a scan:secrets kapisi
package.json scan:secrets script + apk:safe pipeline'a eklendi
src/__tests__/scan-secrets.test.ts 8 test: yakalama + yanlis-pozitif elemesi + REDACTED

Tarayici tasarimi (yanlis-pozitif guvenligi)

Bundle mesru olarak BYOK dogrulama regex kaynaklari (sk-ant-[A-Za-z0-9_-]{20,}),
sk-ant-... placeholder metni ve Firebase public anahtari icerir. Desenler
gercek anahtar onekleri + uzun bitisik alnum ile daraltildi; Firebase + test-fixture
allowlist'te. Gercek gizli deger ASLA loglanmaz — yalniz REDACTED onek.

Dogrulama

  • Taze dist'te VITE_*_API_KEY isimleri artik HIC yok (once useStore bundle'inda
    env-obje property olarak vardi) -> serializasyon vektoru olctu ile kalkti
  • npm run scan:secrets taze dist'te temiz (249 varlik)
  • 3579 test yesil (202 dosya) · tsc -b temiz · lint 0 error
  • BYOK ve native secure storage davranisi degismedi; yeni bagimlilik yok

Onemli baglam

Uygulama henuz dagitimda degil (yapim asamasi) -> bu acil blocker degil, yapisal
hijyen + regresyon kilidi. Ilgili eski (fix-oncesi) APK'larda gercek anahtar literal'i
bulundu; provider tarafinda rotate kullanicinin manuel adimi olarak onerilir.

🤖 Generated with Claude Code

…lease scan guard

Gizli AI anahtarlari (Gemini/Claude/Groq) gecmiste bracket (dinamik)
import.meta.env[...] erisimi yuzunden TUM env objesiyle derlenmis bundle'a
serialize oluyordu. Guncel .env temiz olsa da yapisal sizinti vektoru duruyordu:
biri .env'e tekrar anahtar koyunca sessizce APK'ya gomulurdu.

- aiVoiceService: getEnv{Gemini,Haiku,Groq}Key -> statik NOKTA erisimi
- mediaCredentials: dinamik env[name] -> acik per-provider nokta erisimi
- scripts/scan-secrets.mjs: release bundle gercek-anahtar-sekilli literal tarayici
  (regex-kaynagi/placeholder/Firebase-public/test-fixture yanlis-pozitiflerini eler)
- CI (main.yml) build job + apk:safe pipeline'a scan:secrets kapisi
- 8 unit test: yakalama + yanlis-pozitif elemesi + REDACTED gizleme kilidi

Dogrulama: taze dist'te VITE_*_API_KEY isimleri artik HIC yok (once useStore
bundle'inda env-obje olarak vardi); scan temiz (249 varlik); 3579 test yesil; tsc
temiz; lint 0 error. BYOK ve native secure storage davranisi degismedi.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0141GKY1eQru4Ap1PWN4VVst
@vercel

vercel Bot commented Jul 12, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
car-launcher-pro Ready Ready Preview, Comment Jul 12, 2026 5:05pm
carospro Ready Ready Preview, Comment Jul 12, 2026 5:05pm

… cihaz bekliyor

Bracket->dot + release scan guard host-dogrulandi (CI yesil); taze APK'da eski
anahtar yoklugu + BYOK akisi cihazda dogrulanmali. Provider rotate manuel adim.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0141GKY1eQru4Ap1PWN4VVst
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant