모든 Firefox 확장 프로그램 설치
(jack.cab)- 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 Teller 등 AI 생성 확장이 카지노 사이트로 연결
- “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% 는 오픈소스
-
34.3% 확장은 일일 사용자 0명
모든 확장 설치 시도
- 각 확장의
.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.json이 189MB까지 증가, 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를 찾을 수 있음
- Firefox의 crash report는 공개되어 있음
-
글이 정말 기괴하면서도 멋짐
특히 about: 페이지 중 하나 이상에서 성능 버그를 발견한 게 인상적이었음. 꼭 후속 조사가 필요함 -
확장 목록을 사이트맵으로도 볼 수 있음
Firefox Add-ons sitemap,
Chrome Web Store sitemap,
Edge sitemap 도 참고 가능함 -
영상이 너무 웃겨서 눈물이 남
컴퓨터를 거의 모르는 노년층의 웹 서핑이 이런 느낌일 듯함. 누가 이걸 Chrome에서도 해줬으면 함- 작성자가 30초 동안 연타하던 가짜 확장 버튼이 실제로는 확장이 만든 버튼이었다는 깨달음이 너무 웃겼음. 그것도 세 개나 있었음
- 개인적으로 제일 웃겼던 건 금속 파이프 소리 효과음이었음. 어떤 확장이 그걸 넣었는지 궁금함
- 이건 정말 전설적인 버그 리포트가 될 것 같음
- 아무것도 모르는 사람이 모든 팝업에 “예/동의/확인”을 누르면 이런 결과가 나올 수밖에 없음
- 영상이 어디 있는지 모르겠음. 스크롤해봤는데 정지 이미지밖에 안 보였음
-
“이 서비스 메시가 우리 용도엔 과하게 설계됐지만, 브로커는 84,205개의 마이크로서비스엔 너무 느리다”
이 끝없는 긴장감이 너무 익숙함 -
모든 NPM 패키지에 의존하던 전설의 NPM 패키지가 떠오름
관련 글을 보면 진짜 웃김 -
“이걸로 거의 모든 확장을 설치했더니, 이전에 했던 게 다 바보 같아 보인다”는 말에 깊이 공감함
나도 비슷한 허무함을 느꼈음