하드코딩된 비밀: AI 에이전트가 자동으로 수정할 수 있는 #1 취약점

발행: (2025년 12월 31일 오후 02:39 GMT+9)
3 min read
원문: Dev.to

Source: Dev.to

문제

매주 비밀이 유출됩니다: GitHub에 커밋된 API 키, 설정 파일에 있는 데이터베이스 비밀번호, 환경 변수 기본값에 포함된 AWS 자격 증명.
수정은 간단하지만, 탐지는 쉽지 않습니다—특히 대규모 코드베이스에서는 더욱 그렇습니다.

전형적인 하드코딩된 비밀 패턴:

// ❌ 이것이 생각보다 더 많이 프로덕션에 배포됩니다
const db = new Pool({
  host: 'prod-db.example.com',
  user: 'admin',
  password: 'super_secret_password_123', // CWE-798
});

const stripe = new Stripe('sk_live_abc123xyz789'); // 하드코딩된 API 키

개별적으로는 명확하지만, 50 000줄 규모의 저장소에서는 눈에 잘 띄지 않습니다.

기존 접근 방식

접근 방식단점
grep "password"너무 많은 오탐
비밀 스캐너커밋된 비밀만 감지
코드 리뷰사람은 놓칠 수 있음

도구

eslint-plugin-secure-coding은 린팅 중에 하드코딩된 자격 증명을 감지하는 규칙 집합을 추가합니다. 오류 메시지는 AI가 활용하기 쉽게 포맷됩니다:

  • CWE‑798 – 기계가 읽을 수 있는 취약점 ID
  • 수정 지시 – 적용할 정확한 패턴
  • 위치 – 정확한 라인과 컬럼

린트 출력 예시

src/db.ts
  5:3  error  🔒 CWE-798 OWASP:A02 CVSS:7.5 | Hardcoded credential detected
              Fix: Use environment variable: process.env.DATABASE_PASSWORD

보안 패턴

하드코딩된 값을 환경 변수로 교체합니다:

// ✅ 보안 패턴
const db = new Pool({
  host: process.env.DATABASE_HOST,
  user: process.env.DATABASE_USER,
  password: process.env.DATABASE_PASSWORD,
});

const stripe = new Stripe(process.env.STRIPE_SECRET_KEY);

Cursor, Copilot, Claude와 같은 AI 어시스턴트는 구조화된 오류를 읽고 인간 개입 없이 코드를 자동으로 수정할 수 있습니다.

설치

npm install --save-dev eslint-plugin-secure-coding

ESLint 설정에 권장 구성을 추가합니다:

// eslint.config.js
import secureCoding from 'eslint-plugin-secure-coding';

export default [secureCoding.configs.recommended];

그게 전부입니다—한 줄의 설정만으로 89개의 보안 규칙이 활성화되고 하드코딩된 비밀이 사라집니다.

자료

Back to Blog

관련 글

더 보기 »