flawopen.com/Incidents/ai-agent-retail-skimming-campaign-september-2026
AI 카드 스키밍: Gambit의 소매업 공격 보고서
Gambit 중간 보고서는 사람이 지휘한 AI 기반 소매업 공격을 다룹니다. 보고된 증거와 미검증 주장을 구분하고 방어책을 설명합니다.[1]
방문자가 입력한 이메일 내용을 검색 지침에 그대로 붙여 넣어 지침을 만드는 가게 직원을 떠올려 보세요. 특수하게 만든 요청은 지침을 바꾸고 고객 기록에 보관된 임시 코드를 노출시켜, 누군가 그 코드를 관리자 구역의 문에서 사용할 수 있게 합니다. 매개변수화 쿼리는 이메일을 검색할 값으로만 다루고 지침의 일부로 해석하지 않게 합니다. 보고서는 SQL injection에서 관리자 화면으로 이어진 한 경로를 설명할 뿐, 모든 피해자가 같은 경로를 거쳤다고 하지는 않습니다.[1], [5]
핵심 개념 및 용어
AI 에이전트 프레임워크- 모델에 도구, 작업 상태, 행동 권한을 제공하는 소프트웨어입니다. Gambit에 따르면 운영자는 취약점 탐색에 Strix, 침투 프로젝트에 Cairn, 작업 조율에 Hermes를 사용했고 사람의 지시를 받았습니다.
결제 스키머- 체크아웃에서 결제 정보를 수집하는 무단 코드나 콘텐츠입니다. 고객에게 전달되는 내용을 바꿀 수 있는 코드, 설정, 캐시, 저장소, 배포 경로를 모두 통제해야 합니다.
CWE-89 (SQL injection)- 신뢰할 수 없는 입력이 SQL 문의 의미를 바꾸는 약점입니다. Gambit은 SQL injection으로 시작된 사례 하나를 기록했으며, 이 CWE가 캠페인의 모든 침입을 분류하지는 않습니다.
증거의 신뢰도- Gambit은 공격자의 스테이징 서버에서 복구한 자료, 웹사이트에서 확인한 스키머, 에이전트 로그와 주장을 조합했다고 설명합니다. 중간 분석은 불완전하며 오류가 있을 수 있습니다.
심각도 등급- FlawOpen의 Critical 등급은 편집상 영향 평가이며 CVSS 점수가 아닙니다. CVSS 점수는 부여하지 않았습니다.
프레임워크 매핑
- 이 가이드에서 설명하는 약점의 CWE 참조: CWE-89
- OWASP Top 10:2025 — A01:2025 Broken Access Control
- OWASP Top 10:2025 — A05:2025 Injection
사고 타임라인
Gambit에 따르면 금전 목적의 캠페인이 이때 시작됐으며 중간 보고서 공개 시점에도 진행 중이었습니다.[1]
Gambit은 공격 프로젝트 105건과 다양한 수준으로 침해된 기업 27곳 이상을 보고했습니다. 일부 주장은 독립적으로 검증되지 않았습니다.[1]
Gambit은 조사 결과를 공개하며 피해 기업 두 곳에서 유효기간이 지나지 않은 카드 기록 60만 건 이상을 확인했고 일부 사이트에서 스키머를 검증했다고 보고했습니다.[1]
단계별 공격 실행 흐름
사람이 에이전트 도구를 지휘
Gambit이 복구한 기록에는 취약점 탐색, 침투 작업, 캠페인 조율에 사용된 세 프레임워크가 나옵니다. 보고서에는 사람의 지시도 기록돼 있으므로 사람과 무관한 자율 작전이라고 표현하지 마세요.[1]
기록된 한 경로가 인증 경계를 넘음
Gambit에 따르면 한 프로젝트에서 SQL injection으로 계정의 일회용 코드 데이터가 노출돼 관리자 화면에 접근했습니다. 이는 보고된 한 사례이지 보편적인 순서나 검증된 소스 코드 분석이 아닙니다.[1]
접근 권한이 연결된 시스템으로 확장
Gambit의 예시는 파일 업로드 약점과 호스트 접근을 거쳐 다른 시스템과 비밀 정보로 이어집니다. 구체적인 경로는 달랐습니다. 이 설명은 실행 가능한 단계를 생략하며 모든 피해자에게 같은 단계가 발생했다고 주장하지 않습니다.[1]
체크아웃과 고객 데이터에 영향
Gambit은 일부 상점의 스키머와 피해 기업 두 곳에서 복구한 유효 카드 기록 60만 건 이상을 보고했습니다. 한 소매업체에서 정리 작업이 실수로 테이블 180개를 삭제했다고도 설명합니다. 해당 사실은 보고서에 귀속하세요.[1]
격리에는 무결성과 복구도 포함
초기 접근을 확인하고 노출된 자격 증명을 폐기하며 신뢰할 수 있는 체크아웃 자산을 복구하고 데이터베이스 변경을 조사합니다. 필요하면 결제 파트너에 알리고 깨끗한 백업에서 복구됐는지 검증합니다.
소스 코드 비교: 취약한 구현 vs 보안 패치
이 일반 Python 예시는 Gambit이 설명한 한 경로의 CWE-89 경계만 보여 줍니다. 피해 기업의 코드가 아니며 네트워크나 파일 시스템에 접근하지 않습니다. 문자열 연결은 입력이 쿼리 구문을 바꾸게 합니다. 매개변수화 쿼리는 SQL 구조를 고정하고 이메일을 값으로 전달합니다. 실제 인증에서는 일회용 코드를 평문으로 저장하지 않고, 모든 권한 작업을 서버에서 인가하며, 최소 권한 데이터베이스 계정을 사용해야 합니다. 매개변수화는 이 쿼리 경계만 고치며 다른 진입점이나 이미 침해된 호스트까지 해결하지는 않습니다. 여기서 ?는 Python sqlite3의 qmark 방식입니다. 다른 DB 드라이버는 다른 placeholder 문법을 사용할 수 있습니다.[1], [5]
def find_account(conn, email):
# 일반 예시일 뿐이며 피해자 시스템에서 복구한 코드가 아닙니다.
sql = "SELECT id FROM customers WHERE email = ' " + email + " ' "
return conn.execute(sql).fetchone()
def find_account(conn, email):
# 입력을 데이터로 바인딩해 SQL 구조를 바꾸지 못하게 합니다.
sql = "SELECT id FROM customers WHERE email = ?"
return conn.execute(sql, (email,)).fetchone()
엔지니어링 및 시스템 보안 강화 체크리스트
- ✓모든 SQL 값에 매개변수화 쿼리를 사용하세요. 따옴표와 구분 문자를 포함한 입력이 쿼리 구문이 아니라 데이터로 처리되는지 CI에서 확인하세요.
- ✓일회용 코드는 짧은 유효기간과 1회 사용을 보장하는 검증값으로만 저장하고 계정 조회, 로그, 백업, 지원 화면에서 읽히지 않게 하세요.
- ✓모든 관리자 경로와 업로드 작업에 서버 측 인가를 적용하고, 미인증 및 낮은 권한 계정으로 각각 테스트하세요.
- ✓검토 및 서명된 배포로 체크아웃 무결성을 보호하고 스크립트, 템플릿, 태그 관리자, CDN 객체, 캐시, DB 페이지 내용의 변경을 경고하세요.
- ✓DB, 클라우드, CI, 결제 자격 증명을 분리하고 최소 권한을 적용하세요. 노출이 의심되면 비밀 정보를 교체하고 사용 내역을 감사하세요.
- ✓변경 불가능하고 격리된 백업을 유지하고 복구를 훈련하세요. 서비스 재개 전에 체크아웃, DB 무결성, 결제 처리를 검증하세요.
출처
- Gambit Security — AI Agents Are Hacking Online Retailers for $25 a Company (중간 보고서, 2026-09-22)
- Forbes — A Chinese hacker used AI to attack more than 100 companies (2026-09-22)
- SecurityWeek — AI-Powered Campaign Targets Hundreds of Online Retailers (2026-09-24)
- TechRadar — Massive Chinese hack uses AI agents to steal over 600,000 credit cards (2026-09-24)
- MITRE CWE-89 — Improper Neutralization of Special Elements used in an SQL Command