MyBB는 과거 MyBulletinBoard라는 이름으로 알려졌던 PHP·MySQL 기반의 무료 오픈소스 포럼 소프트웨어입니다. 최근 MyBB 1.8.20 이하 버전에서 치명적인 저장형 XSS(교차 사이트 스크립팅) 및 RCE(원격 코드 실행) 취약점이 발견되었습니다. 이로 인해 포럼에서 일반 사용자 계정만 가진 악의적인 공격자도 관리자에게 악성 개인 메시지를 보내거나 악성 게시글을 작성하는 것만으로 포럼 전체를 장악할 수 있습니다.
발견된 취약점
MyBB에서 문제의 근본 원인이 된 취약점은 다음과 같습니다.
게시글 및 개인 메시지의 파싱 오류
첫 번째 취약점은 자바스크립트를 탐지하지 못하는 부적절한 파싱(parsing) 오류입니다. 이를 악용하면 공격자가 관리자에게 악성 자바스크립트 코드가 담긴 개인 메시지를 보낼 때 보안 검증을 우회할 수 있습니다. 더욱 위험한 점은, 관리자가 해당 메시지를 열어보기만 해도 공격이 성립한다는 것입니다. 해커가 포럼을 완전히 장악하기 위해 별도의 추가 행동은 필요하지 않습니다. 관리자가 개인 메시지를 여는 순간, 공격자는 데이터베이스에 저장된 모든 사용자 계정, 비공개 스레드, 개인 메시지에 대한 전체 접근 권한을 손에 넣게 됩니다.
원격 코드 실행(RCE) 취약점
두 번째 취약점은 저장형 원격 코드 실행(Remote Code Execution)입니다. 원래 이 취약점은 관리자 권한을 가진 사용자만 악용할 수 있습니다. 하지만 개인 메시지의 파싱 오류를 통해 해커는 먼저 사이트의 원격 제어권을 탈취한 뒤, 데이터베이스에 악성 PHP 코드를 저장할 수 있습니다.
기술적 세부 분석
'파싱'이란 문자열 분석을 의미합니다. MyBB에서 파싱은 사용자 입력을 정제(sanitize)하고 이를 mycode 또는 bbcode로 변환하는 과정을 말하며, bbcode는 포럼에서 이미지·링크·동영상을 게시글에 삽입하기 위해 사용되는 포럼 고유의 마크업 방식입니다.
파싱은 모든 HTML 태그와 큰따옴표(")를 제거하는 단계에서 시작되며, 이후 bbcode를 iframe 형태로 변환하게 됩니다.
그러나 bbcode가 별도의 단계에서 HTML 마크업으로 변환되기 때문에, [url] bbcode가 HTML 마크업과 큰따옴표로 변환되는 과정에서 iframe의 src 속성이 깨지게 됩니다. 바로 이 결과물이 화면에 렌더링됩니다.
만약 이 취약점이 존재하지 않았다면 bbcode 안에 또 다른 bbcode를 중첩해 삽입하는 것은 불가능했을 것입니다. 이 중첩이 가능해지면서 <iframe> 태그에 onload 이벤트 핸들러가 주입됩니다. 이 이벤트 핸들러는 iframe 내부의 페이지가 로드되는 즉시 실행되므로, 악성 자바스크립트를 구동하는 데 어떤 사용자 상호작용도 필요하지 않습니다.
대응 방안: 최신 버전으로 업데이트
MyBB는 1.8.21 버전에서 해당 취약점을 패치했습니다. 따라서 가장 시급한 조치는 이 버전으로 즉시 업데이트하는 것입니다. 아울러 유사한 공격의 피해자가 되지 않으려면 웹 애플리케이션 방화벽(WAF) 설치도 함께 고려해야 합니다. WAF는 지속적인 모니터링 체계를 제공하여 웹사이트에 한층 강력한 보호막을 더해 줍니다.
Astra 방화벽은 XSS, SQL 인젝션, CSRF, 악성 봇, OWASP Top 10을 비롯한 100가지 이상의 사이버 공격으로부터 웹사이트를 보호하는 대표적인 웹 방화벽입니다. 다음은 Astra 대시보드의 실제 화면입니다.
지금 Astra 데모를 신청하고 웹사이트 보안 상태를 확인해 보세요!