1P by GN⁺ 4시간전 | ★ favorite | 댓글 1개
  • Mozilla의 Add-ons API를 이용해 84,000여 개 Firefox 확장 프로그램 전체를 수집·설치한 대규모 실험 진행
  • 스크래핑을 통해 84,235개 고유 확장 확보, 총 용량 49.3GB, 데이터셋은 Hugging Face에 공개
  • 설치 과정에서 피싱·스팸·PUA(잠재적 원치 않는 앱) 등 다양한 악성 확장이 다수 발견됨
  • 최종적으로 84,194개 확장 설치에 성공했으나 브라우저는 사실상 사용 불가 상태로 확인
  • 실험은 Firefox 확장 생태계의 규모, 품질, 보안 문제를 총체적으로 드러낸 사례로 평가됨

모든 Firefox 확장 프로그램 설치 실험

  • Firefox용 84,000여 개 확장 프로그램 전체를 수집·분석·설치한 대규모 실험
  • Mozilla의 공개 Add-ons API를 통해 전체 확장 목록을 스크래핑하고, 실제 설치까지 수행
  • 데이터셋은 Hugging Face에 공개되어 누구나 접근 가능
  • 여러 차례 시도 끝에 84,194개 확장 설치에 성공, 그러나 브라우저는 사실상 사용 불가 상태
  • 실험을 통해 확장 생태계의 규모, 품질, 악성 확장, 스팸, PUA(잠재적 원치 않는 앱) 등이 드러남

Firefox 확장 프로그램 스크래핑

  • Mozilla의 addons-server API는 인증 없이 접근 가능하며, search 엔드포인트로 확장 목록을 페이지 단위 조회 가능
  • 기본 정렬(recommended,users)로는 약 30,000개만 조회되어, created, rating, hotness, updated 등 다양한 정렬 옵션을 조합해 누락된 확장을 확보
  • exclude_addons 파라미터를 활용해 페이지 600 이후의 확장도 추가 수집
  • 카테고리별 병렬 요청으로 총 84,235개 고유 확장 확보, 평균 크기 584.9KB, 총 용량 49.3GB
  • 최종 데이터셋은 Hugging Face에 업로드되어 공개됨
  • 2026년 4월 11일 업데이트에서는 created__gte, created__lte 필터를 이용해 정확하고 효율적인 전체 스크래핑 구현

Firefox 확장 프로그램 분석

  • 가장 큰 확장dmitlichess(196.3MB)로, 오디오 파일 2000개 이상 포함
    • 상위 10개 확장은 대부분 AI 모델, Unity 앱, 이미지 리소스 등 대용량 콘텐츠 포함
  • 가장 작은 확장theTabs-saver(7.5KB)로 코드 없음
  • 평점 최하 확장Tab Stack for Firefox
  • 가장 오래된 확장Web Developer
  • 스크린샷 최다 확장RDS Bar(54장)
  • 권한 요청 최다 확장FalscheLaden(3,695개 권한 요청), 다음은 Google Dark Theme(2,675개)
  • 가장 많은 확장을 배포한 개발자Dr. B(84개 확장), 대부분 README 포함, 아이콘 없음
  • 피싱 및 악성 확장

    • 데이터셋에서 암호 지갑 피싱 확장 다수 발견
      • 예: “Іron Wаllеt”은 설치 3초 후 NocoDB에서 URL을 받아 피싱 페이지로 이동
      • 일부 확장은 시드 문구를 입력받아 서버로 전송
    • 보고 후 다음날 Mozilla에서 대부분 제거됨
    • API 키가 쓰기 권한을 가진 사례도 발견되어 직접 데이터 삭제 수행
  • SEO 스팸 확장

    • 확장 페이지의 “Homepage” 링크를 백링크용으로 악용
    • Typo Sniper, Tab Fortune TellerAI 생성 확장이 카지노 사이트로 연결
    • “Code Injector”류 확장 다수 존재, 동일 코드 구조와 무작위 도메인 사용
    • 대부분 2025년에 생성된 것으로 확인
  • PUA(잠재적 원치 않는 앱) 확장

    • “Custom Web Search” 패턴을 가진 확장 20여 종, 총 사용자 70만 명 이상
    • 모두 동일한 구조와 도메인, “Innover Online Group Ltd” 명시
    • Mozilla가 일부(115,000명 사용자 보유) 비활성화 조치
    • Yahoo 제휴 코드 safeplexsearch 사용, Firefox 전용 버전 존재
    • 유사 기업 Atom Apps도 동일한 방식으로 확장 배포, 총 22만 일일 사용자
  • 통계 요약

    • 34.3% 확장은 일일 사용자 0명
      • 10명 이상 사용자: 25.1%, 100명 이상: 10.6%, 1,000명 이상: 3.2%, 10,000명 이상: 0.7%
    • 76.7% 오픈소스(SPDX 라이선스 기준)
    • 23% 는 글 작성 이후 생성된 확장
      • 그중 19% 는 사용자·리뷰·아이콘·다운로드 모두 없음
    • 2.4% 유료 확장, 그중 38.1% 는 오픈소스

모든 확장 설치 시도

  • 각 확장의 .xpi 파일을 프로필 폴더에 GUID명으로 저장 후 extensions.json 수정
  • addonStartup.json.lz4 삭제 및 extensions.json 조작으로 자동 활성화
  • 시도 0: 65,335개 (Windows VM)

    • Enterprise Policy 방식으로 설치 시도했으나 메모리 부족 및 시스템 정지
  • 시도 1: 약 1,000개

    • 직접 다운로드 후 수동 배치, 설치 성공
    • 일부 확장은 모든 텍스트를 특정 문자열로 변경
    • 다수의 보안 확장으로 인해 도메인 차단, 경고 팝업 빈번
  • 시도 2: 65,335개

    • addonStartup.json.lz4 삭제 누락으로 실제 활성화는 1,000개 수준
    • about:addons 열람 중 Firefox 프리징 및 재시작 불가
  • 시도 3: 65,335개 (Mac)

    • 병렬 다운로드 시 속도 저하, 총 6시간 소요
    • Firefox 실행 시 응답 없음, extensions.json 크기 144MB
    • 디스크 쓰기량 400GB 이상 발생
  • 시도 4~10: 1,000~6,000개

    • 3,000개까지는 웹페이지 로드 가능
    • 4,000개 이상부터 모든 사이트 차단, 6,000개 시 about:addons만 로드 가능
  • 시도 11: 84,194개 (6개월 후)

    • 16~24GB RAM 환경에서 가상머신(VM) 사용
    • 다운로드 1시간 43분 소요, 일부 확장은 Defender 탐지
    • Firefox 실행 시 extensions.json189MB까지 증가, 39분 후 강제 종료
    • 이후 enable.js 실행으로 재시도
    • Launch 1~3 결과

      • Launch 1: 렌더링 없이 39분 대기 후 중단
      • Launch 2: 브라우저 표시 후 3분 내 크래시
      • Launch 3: 장시간 대기 후 안정화 성공, 84,194개 확장 로드 확인

모든 확장 사용 테스트

  • about:addons

    • 설정 페이지 로드 실패, 인덱스 페이지는 6시간 후 완전 로드
    • 메모리 사용량 27~37 GiB 유지
    • 아이콘 미표시, 응답 지연 심각
  • about:support

    • 총 84,205개 확장 표시되었으나 내장 확장 포함
    • 실제 설치된 외부 확장은 84,194개로 확인
  • about:preferences

    • New Tab 옵션 다수 존재, 충돌 및 크래시 발생
  • New Tab

    • Firefox Home만 정상 로드, 나머지 확장은 모두 실패
  • moz-extension

    • buyPal 확장이 자동으로 탭을 대체하며 유일하게 정상 로드
    • 이후 Firefox 재크래시
  • example.com

    • 24시간 대기에도 페이지 미로드, 차단 확장 다수 존재 추정
  • about:telemetry

    • Environment Data 클릭 시 즉시 크래시

사용 가능성 평가

  • 불가능
  • Firefox는 84,000개 확장 설치 상태에서 사실상 작동 불가

추가 탐구 제안

  • about:addons의 6시간 로드 원인 및 example.com 미로드 원인 분석
  • .xpi를 지원하는 Kagi Orion, GNOME Web 등 타 브라우저 실험
  • 테마(50만 개 이상)나 사용자 스크립트·스타일 전체 설치 실험
  • Chrome Web Store 전체 확장 설치는 규모상 불가능

각주 요약

  • 총 8개 확장은 스크래핑 누락 또는 삭제됨
  • 2025년 9월 작성된 초기 버전 이후 2026년 4월 수치 갱신
  • “Foreshadowing”은 문학적 복선 장치로 언급됨
Hacker News 의견들
  • "Middle Finger Emoji Sticker" 상을 받았음
    그 과정을 짧게 정리해 블로그에 올렸음
    원문은 여기에서 볼 수 있음

  • 예전 Internet Explorer 툴바 전쟁이 떠오름
    인터넷 카페마다 Ask.com, Google, Yahoo, 나중엔 Bing 툴바가 최소 두 개씩 깔려 있었던 기억임

  • 왜 이렇게 오래 걸렸는지 조사해봤음
    13년 전엔 extensions.json이 아니라 extensions.sqlite였음
    지금은 20ms마다 전체 파일을 직렬화해 다시 쓰는 구조라 15개 확장엔 괜찮지만 84,194개면 문제임
    디바운스 값을 어떻게 정했는지가 궁금함. 어떤 확장이 초당 여러 번 extensions.json을 쓰는지 의문임

  • 실제 페이지는 하나도 제대로 안 열리지만, 글 자체는 정말 재밌게 읽었음
    “crash reporting을 켰다”는 부분에서 한참 웃었음. Mozilla 팀 입장에선 공포 이야기일 듯함

    • Firefox의 crash report는 공개되어 있음
      다만 작성자가 올린 건 찾지 못했음. crash-stats.mozilla.org에서 볼 수 있음
      프로필이 남아 있다면 이 가이드를 통해 crash ID를 찾을 수 있음
  • 글이 정말 기괴하면서도 멋짐
    특히 about: 페이지 중 하나 이상에서 성능 버그를 발견한 게 인상적이었음. 꼭 후속 조사가 필요함

  • 확장 목록을 사이트맵으로도 볼 수 있음
    Firefox Add-ons sitemap,
    Chrome Web Store sitemap,
    Edge sitemap 도 참고 가능함

  • 영상이 너무 웃겨서 눈물이 남
    컴퓨터를 거의 모르는 노년층의 웹 서핑이 이런 느낌일 듯함. 누가 이걸 Chrome에서도 해줬으면 함

    • 작성자가 30초 동안 연타하던 가짜 확장 버튼이 실제로는 확장이 만든 버튼이었다는 깨달음이 너무 웃겼음. 그것도 세 개나 있었음
    • 개인적으로 제일 웃겼던 건 금속 파이프 소리 효과음이었음. 어떤 확장이 그걸 넣었는지 궁금함
    • 이건 정말 전설적인 버그 리포트가 될 것 같음
    • 아무것도 모르는 사람이 모든 팝업에 “예/동의/확인”을 누르면 이런 결과가 나올 수밖에 없음
    • 영상이 어디 있는지 모르겠음. 스크롤해봤는데 정지 이미지밖에 안 보였음
  • “이 서비스 메시가 우리 용도엔 과하게 설계됐지만, 브로커는 84,205개의 마이크로서비스엔 너무 느리다”
    끝없는 긴장감이 너무 익숙함

  • 모든 NPM 패키지에 의존하던 전설의 NPM 패키지가 떠오름
    관련 글을 보면 진짜 웃김

  • “이걸로 거의 모든 확장을 설치했더니, 이전에 했던 게 다 바보 같아 보인다”는 말에 깊이 공감함
    나도 비슷한 허무함을 느꼈음