plugin-security

2 개의 포스트

cloudflare

EmDash를 소개합니다 — 플러그인 보안 문제를 해결한 워드프레스의 정신적 후속작 (새 탭에서 열림)

EmDash는 24년 된 워드프레스(WordPress)의 구조적 한계를 극복하고 현대적인 웹 환경에 최적화하기 위해 등장한 오픈소스 CMS입니다. 기존 워드프레스의 가장 큰 취약점인 플러그인 보안 문제를 '다이나믹 워커(Dynamic Worker)'를 통한 샌드박스 격리 방식으로 해결했으며, TypeScript와 Astro 프레임워크를 기반으로 설계되었습니다. 이를 통해 서버리스 환경에서 안전하고 빠른 성능을 보장하며, MIT 라이선스를 채택해 개발자들에게 더 높은 자유도를 제공하는 것을 목표로 합니다. ### 워드프레스의 유산과 현대적 재구성 * **전통의 계승과 한계:** 워드프레스는 인터넷의 40% 이상을 점유하며 출판의 민주화를 이루었으나, AWS EC2조차 없던 시절에 설계되어 현대의 서버리스 및 글로벌 분산 네트워크 환경을 충분히 활용하지 못하고 있습니다. * **현대적 기술 스택:** EmDash는 전체 코드가 TypeScript로 작성되었으며, 콘텐츠 기반 웹사이트에 최적화된 프레임워크인 Astro를 기반으로 구동됩니다. * **서버리스 최적화:** 가상 프라이빗 서버(VPS)에 의존하던 방식에서 벗어나, Cloudflare와 같은 서버리스 플랫폼이나 Node.js 환경 어디서든 유연하게 배포할 수 있습니다. * **완전한 오픈소스:** 워드프레스의 코드를 전혀 사용하지 않고 밑바닥부터 새로 작성하여, GPL보다 허용 범위가 넓은 MIT 라이선스를 적용해 생태계 참여를 독려합니다. ### 플러그인 보안 위기의 근본적 해결 * **직접 접근의 위험성 제거:** 워드프레스 취약점의 96%는 플러그인에서 발생하며, 이는 PHP 스크립트가 데이터베이스와 파일 시스템에 직접 접근할 수 있는 구조 때문입니다. * **다이나믹 워커(Dynamic Worker) 격리:** EmDash는 각 플러그인을 독립된 샌드박스(Isolate)에서 실행합니다. 플러그인은 핵심 시스템에 직접 접근할 수 없으며 선언된 범위 내에서만 작동합니다. * **역량 기반 권한 모델 (Capability-based Model):** 플러그인은 매니페스트 파일에 필요한 권한(예: `read:content`, `email:send`)을 명시적으로 선언해야 합니다. 관리자는 설치 전 플러그인이 어떤 권한을 요구하는지 OAuth 승인 과정처럼 명확히 확인할 수 있습니다. * **네트워크 제어:** 플러그인은 외부 네트워크 접근이 기본적으로 차단되며, 필요한 경우 특정 호스트네임에 대해서만 접근 권한을 정적으로 부여받아 실행됩니다. ### 시장 종속성 탈피와 개발자 생태계 혁신 * **신뢰 구조의 변화:** 기존 워드프레스는 보안 위험 때문에 마켓플레이스의 수동 검토와 평판에 의존해야 했으나, EmDash는 기술적 격리를 통해 코드 수준에서 신뢰를 보장합니다. * **비즈니스 유연성:** 보안 이슈로 인해 강제되었던 마켓플레이스 종속성과 라이선스 제약에서 벗어나, 개발자들이 자신의 코드를 더 자유롭게 배포하고 상용화할 수 있는 환경을 제공합니다. * **정적 선언을 통한 자동화:** 플러그인의 권한 요구 사항이 정적으로 정의되어 있어, 관리자는 특정 권한을 요구하는 플러그인의 설치를 그룹별로 제한하는 등 정책 기반의 관리가 가능해집니다. 현재 EmDash는 v0.1.0 프리뷰 버전을 공개하고 초기 개발자 베타를 진행 중입니다. 클라우드플레어 계정이나 Node.js 서버에 직접 배포하여 테스트할 수 있으며, 기존 워드프레스의 운영 편의성은 유지하면서도 최신 보안 표준과 성능이 필요한 프로젝트에 강력한 대안이 될 것으로 보입니다.

figma

플러그인 보안 업데이트 (새 탭에서 열림)

Figma는 플러그인 보안을 위해 사용하던 Realms shim에서 샌드박스 탈출 취약점이 발견되자 즉시 플러그인 게시와 업데이트를 중단하고 패치를 적용했다. 공개된 플러그인들을 감사한 결과 실제 악용 흔적은 발견되지 않았으며, 재발 방지를 위해 JavaScript 실행 환경을 Realms shim에서 WebAssembly로 컴파일한 QuickJS VM으로 교체했다. ## 플러그인 보안의 기본 원칙 Figma는 플러그인이 다음 작업을 수행할 수 있도록 설계했다. - 사용자가 명시적으로 실행한 경우에만 동작 - 플러그인 전용 대화상자 안에서 UI 표시 - 현재 열어 실행한 Figma 문서의 데이터 읽기 - 해당 문서의 데이터 수정 - 인터넷상의 서버와 통신 반대로 플러그인은 다음 작업을 할 수 없어야 한다. - 사용자 동의 없이 스스로 실행 - 파일을 소유한 프로젝트나 팀 정보 접근 - 실행 중이 아닐 때 데이터 접근 - 실행된 파일 이외의 다른 파일 데이터 접근 - 플러그인 UI 대화상자 외부의 Figma UI 변경 또한 Organization 요금제에서는 관리자가 허용된 플러그인 목록을 지정해 조직 내에서 신뢰할 수 없는 플러그인의 실행을 차단할 수 있다. ## Realms shim 취약점 발견 - Figma는 웹에서 서드파티 JavaScript를 안전하게 실행하기 위해 Realms shim을 사용했다. - 2019년 9월경 Realms shim에서 여러 독립적인 취약점이 발견됐다. - 취약점이 악용되면 샌드박스 내부 코드가 외부로 탈출해 Figma가 설정한 플러그인 보안 제한을 우회할 수 있었다. - 첫 번째 취약점은 공개 GitHub 이슈로 보고됐고, 나머지는 제한된 보안 권고를 통해 비공개로 공유됐다. - Figma는 공개 플러그인을 감사했지만 실제 플러그인이 취약점을 악용한 증거는 찾지 못했다. ## 취약점에 대한 대응 Figma는 위험 확산을 막기 위해 플러그인 배포 체계를 일시적으로 제한했다. - 신규 플러그인의 커뮤니티 허브 게시 중단 - 기존 플러그인의 업데이트 게시도 완전히 중단 - 공개 취약점에 대해서는 Realms shim 패치를 당일 적용 - 비공개 취약점은 관련 업체들과 공개 일정을 조율한 뒤 다음 주에 해결 - 모든 수정 사항이 배포된 후 취약점 세부 내용을 공개 - 게시된 플러그인 코드를 감사해 실제 공격 여부 확인 Figma의 수동 리뷰는 주로 사용자 경험과 품질을 검토하는 절차이며, 보안 경계를 사람이 직접 검증하는 방식은 아니다. 보안은 샌드박스가 강제하도록 설계했기 때문에, 리뷰만으로 악성 코드나 취약점을 완전히 차단할 수 있다고 보지 않았다. ## 실시간 업데이트가 만드는 위험 - Figma 플러그인 코드는 라이브 방식으로 배포된다. - 개발자가 기존 플러그인을 업데이트하면 변경 사항이 열려 있는 클라이언트에도 즉시 전파된다. - 따라서 취약점을 알고 있는 플러그인 개발자가 업데이트를 통해 악성 코드를 배포할 가능성을 차단하기 위해 기존 플러그인 업데이트까지 중단했다. - 이는 플러그인 생태계의 신속한 배포 기능이 보안 사고 시 위험 요소가 될 수 있음을 보여준다. ## QuickJS 기반 실행 환경으로 전환 Figma는 사고 대응 과정에서 Realms shim을 완전히 제거하고 QuickJS를 도입했다. - QuickJS는 C로 작성된 JavaScript 가상 머신이다. - Figma는 이를 WebAssembly로 크로스 컴파일해 플러그인 실행에 사용했다. - Realms shim의 객체 경계 혼동에서 비롯된 이번 취약점 유형은 새 구현에서는 발생하지 않는다. - 기존 구조가 교체 가능한 아키텍처로 설계되어 있었기 때문에 백업 계획이었던 QuickJS로 빠르게 전환할 수 있었다. ## 실용적인 결론 서드파티 코드를 실행할 때는 사람의 코드 리뷰보다 강제 가능한 샌드박스 경계가 핵심이다. 또한 배포 중단, 신속한 패치, 비공개 정보 공개 일정 조율, 실행 환경 교체 계획을 사전에 마련해 두면 취약점 발견 시 피해 확산을 효과적으로 줄일 수 있다.