구글의 Project Zero는 자바스크립트 엔진 V8에서 취약점을 찾는 퍼저 Fuzzilli와 AI 기반 분석 시스템 BigSleep을 비교했다. 2026년 4~9월 실제 운영에서는 BigSleep이 45건, Fuzzilli가 37건의 취약점을 보고했고, 두 시스템이 함께 찾은 비율은 약 25%였다. 과거 버그를 대상으로 한 별도 실험에서는 중복 비율이 약 60%로 추정됐지만, 두 방식은 여전히 서로 보완적이라는 게 Project Zero의 결론이다.

Fuzzilli는 여러 인스턴스에서 지속적으로 실행되며, BigSleep은 하루 한 번 새 커밋을 검토하고 버그 재현 테스트를 작성한다. 두 시스템 모두 Clusterfuzz를 거쳐 버그를 보고한다. 비교 대상은 성숙한 테스트·퍼징 체계를 갖춘 V8로 한정됐다. 운영 통계에서 중복·조치 불가능한 보고를 제외하고, 수정 커밋이 연결된 취약점을 기준으로 집계한 결과가 45건 대 37건이다. 두 시스템의 비용이나 취약점당 비용은 아직 비교하기 어렵다고 밝혔다.

중복률이 약 60%라는 실험은 2023년 초부터 2026년 중반까지 Fuzzilli가 찾은 과거 버그 가운데 조건에 맞는 112건을 대상으로 했다. Project Zero는 각 버그를 도입했을 가능성이 있는 커밋을 BigSleep에 검토하게 하고, 버그마다 25회 시도하도록 했다. BigSleep은 원래 버그의 약 62%를 다시 찾았고, 약 12%의 커밋에서는 다른 버그를 찾았다. 다른 시작점과 프롬프트를 적용한 추가 실험까지 합치면 원래 버그를 찾은 비율은 약 70%, 어떤 버그든 찾은 비율은 약 84%로 올라갔다. 다만 과거 버그를 재현할 수 있는 환경과 플래그를 제한했고, 잘못된 커밋을 골랐을 가능성도 있어 BigSleep에 불리한 조건이 있었다. 반대로 퍼저도 설정을 바꾸면 일부 버그를 더 찾을 수 있으므로 추가 실험 결과는 주의해서 해석해야 한다.

두 방식의 강점도 달랐다. BigSleep은 여러 단계의 논리를 조합해야 하거나 특정 값·새로운 언어 기능이 필요한 버그를 찾는 데 강점을 보였다. 퍼저는 소스 코드만 읽어 추론하기 어려운 버그를 찾고, 새 코드가 추가될 때 빠르게 탐색하는 데 유용했다. 퍼저가 찾기 어려운 버그는 AI 에이전트도 찾기 어려운 경향이 있었고, 컴파일러 버그에서는 실험상 중복이 특히 낮았다. Project Zero는 취약점이 사용자에게 영향을 미치기 전에 더 많이 발견하려면 공급업체가 퍼징과 에이전트 기반 코드 분석을 모두 수행해야 한다고 권고했다.

Fuzzilli 저장소 · BigSleep 소개 · Chrome 보안 업데이트 안내

부록: 원문 예시

text
// Flags: --ignition-elide-redundant-tdz-checks function trigger(cond) {   {     target: switch(1) {       case 1:         do {           // Labeled break targeting the switch. The do-while LoopBuilder remains unaware.           if (cond) break target;         } while((x=1) && false); // Condition performs a check/assignment on x.         break;       default:         x=1; // Ensure x is considered initialized across all switch branches for merging.     }     // Generator incorrectly believes x is checked/initialized. Elides TDZ check.     x + 1;     let x;   }  }  trigger(true); 
text
[generated bytecode for function: simple]          0x2ad5001000e4 @    0 : 1b ff f9  Mov <context>, r0          0x2ad5001000e7 @    3 : 0d 2a     LdaSmi [42]          0x2ad5001000e9 @    5 : b5        Throw          0x2ad5001000ea @    6 : d1        Star1          0x2ad5001000eb @    7 : 8d f8 00  CreateCatchContext r1, [0]          0x2ad5001000ee @   10 : d2        ...          ...          0x2ad5001000f7 @   19 : b7        Return Handler Table (size = 16)    from   to       hdlr (prediction,   data)   (   3,   6)  ->     6 (prediction=1, data=0)