Transcript
00:00:00워드프레스에서 최근 일련의 취약점이 발견되었는데, 특히 최신 취약점은 매우 심각해서
00:00:04해커가 관리자 패널의 완전한 제어권을 탈취할 수 있습니다. SQL 인젝션부터 셸 명령
00:00:09실행까지 가능한 꽤 심각한 수준이죠. 워드프레스에 관심이 없을 수도 있지만, 전 세계 웹사이트의 44% 이상이
00:00:14워드프레스로 구동되므로 여러분이 이용하고 데이터를 입력하는 상당수 웹사이트가
00:00:19이 취약한 버전의 워드프레스로 작동 중일 가능성이 높습니다. 작동 방식은 기본적으로 이렇습니다.
00:00:25제 로컬 환경에 순정 버전의 워드프레스를 설치해 두었는데요,
00:00:29첫 번째 스크립트를 실행해 취약점이 존재하는지 확인해 보면,
00:00:34HTTP 207 응답을 받는 것을 볼 수 있습니다. 즉 실제로 취약점이 존재한다는 뜻이며, 이제 두 번째 검사를 실행할 수 있습니다.
00:00:41바로 인터랙티브 셸에 진입하는 것이죠. 사이트에 SQL 인젝션을 실행해 새로운 관리자 계정을 생성하고
00:00:47악성 플러그인을 업로드하여 이 웹사이트의 모든 파일과 상호작용할 수 있게 만듭니다.
00:00:52그럼 문제의 내부로 들어가 정확히 어떻게 작동하는지 알아보겠습니다.
00:00:58지금 보고 계신 이 리포지토리는 취약한 워드프레스 사이트에 SQL 인젝션을 수행하는 방법을 정확히 보여줍니다.
00:01:066.90~6.94 또는 7.00~7.01 사이의 모든 사이트가 대상이죠. 공격은 인증되지 않은
00:01:14엔드포인트인 batch v1을 호출하는 것으로 시작하며, 이를 통해 유효성 검사 및 권한 확인을 거치는
00:01:20다른 요청들을 일괄적으로 번들 처리할 수 있습니다. 배치 핸들러에는 동기화 상태를 유지해야 하는 두 개의 병렬 배열인 validation과 matches가 있지만,
00:01:26버그로 인해 wp pass URL 파일 함수가 잘못된 경로로 인해 실패할 때 validation만 업데이트되었습니다.
00:01:33그래서 두 배열을 조회하는 데 동일한 인덱스를 사용할 때 결과가 불일치하게 됩니다. POC는 이 점을 악용합니다.
00:01:41단 하나의 요청, 즉 자체적으로 요청 본문을 가진 v2 post 엔드포인트로의 POST 요청만 포함된 배치를 전송합니다.
00:01:48부모 요청이 POST 요청으로 정상 검증되었기 때문에, 요청 본문 내부의 모든 요청은 메서드 허용 목록 검사를 우회하게 되어
00:01:56GET 요청을 보낼 수 있게 됩니다. 그 내부 배치 안에는 존재하지 않는 포스트에 대한 GET 요청이 들어 있어
00:02:02앞서 언급한 동기화 오류를 유발하고, 워드프레스가 get items라는 함수 하에서 동일한 요청을 디스패치하게 만듭니다. 여기서 author
00:02:10exclude 필드가 author not in에 매핑되며, 취약한 빌드는 이를 SQL에 문자열로 보간합니다. 기본적으로 이 모든 과정이 실행되면서
00:02:18SQL이 이스케이프 처리되지 않는 것이죠. POC는 일련의 요청을 사용하여 최종적으로 v2 users로의 POST 요청을 통해
00:02:25새로운 관리자 계정을 생성할 수 있게 합니다. 리포지토리는 이 모든 단계를 상세히 다루고 있습니다. 처음 5단계는 인증 전 단계로 버그를 악용하지만, 6단계는 인증된 사용자의
00:02:35일반적인 워드프레스 동작인 악성 패키지 업로드입니다. 앞서 말씀드렸듯이 이것은 순정 버전의 워드프레스일 뿐이며, 악성 플러그인을 통해 취약점에 접근하는 것이 아닙니다.
00:02:46기본 워드프레스를 설치하면 됩니다. 먼저 취약점이 실행 가능한지
00:02:52검증하는 이 체크 스크립트를 실행한 다음, 예를 들어 read 명령을 실행하면
00:02:57데이터베이스 사용자 이름과 데이터베이스 이름 등을 알려줍니다. 이제 웹사이트에 대해 SQL을 실행할 수도 있으므로
00:03:03데이터베이스가 실제로 어떤 버전으로 실행 중인지 등을 알아낼 수 있습니다. 하지만 사실 이건 심각한 부분이 아닙니다. 정말 심각한 건
00:03:07악성 플러그인을 업로드할 수 있는 권한을 가진 관리자 계정을 실제로 생성하는 이 부분입니다.
00:03:15이 경우 web shell이라고 불리는데, 이를 통해 웹사이트의 셸에 접근할 수 있게 되어 이 웹사이트의
00:03:22모든 파일에 접근할 수 있습니다. 이 공격은 영상 앞부분에서 설명해 드린 것과 같은 방식으로 이루어집니다.
00:03:27관리자가 생성된 후 플러그인이 업로드되고, 마지막으로 해당 사용자는 삭제됩니다. 따라서 플러그인의 존재와
00:03:34발생한 일이 더욱 은밀해집니다. 이것이 얼마나 심각한지 시연하기 위해 별도의 스크립트를 작성했습니다.
00:03:38관리자를 생성한 뒤 시스템에 계속 유지시키는 스크립트죠.
00:03:40여기 사용자 이름과 비밀번호가 있습니다. 다시 웹사이트로 돌아가 wp-login 경로로 이동한 뒤 해당
00:03:47사용자 이름과 비밀번호를 입력하고 로그인 버튼을 누르면, 이제 관리자 패널에 대한 전체 접근 권한을 갖게 됩니다. 이 내용이 혼란스럽더라도 걱정하지 마세요.
00:03:54저 역시 파악하는 데 오랜 시간이 걸렸습니다. 알려진 바에 따르면, 그 결과 만들어진 익스플로잇 체인은 터무니없이
00:04:00복잡해서 보안 연구원이 스스로 발견하고 조합하려면 수주, 길게는 수개월이 걸렸을 것이라고 합니다.
00:04:05어떤 보안 연구원도 AI 없이는 10시간 만에 이 익스플로잇 체인을
00:04:10찾아내서 완성할 수 없었을 것입니다. 이는 상당히 무서운 일입니다. 악의적인 공격자들이 봇을 이용해 리포지토리를 스캔하고
00:04:17URL을 확인하면서 취약점이 나타나기만을 기다렸다가 AI를 사용해 기록적인 속도로 악용할 수 있기 때문이죠.
00:04:23Reddit의 한 사용자는 취약점이 발견된 지 단 이틀 만에 자신의 사이트가 침해당했다고 말했습니다.
00:04:27주말에만 업그레이드를 진행했기 때문에, 취약점이 있는 동안 공격자가 새 관리자를 생성하고 로그인할 수 있었던 것이죠.
00:04:33이 익스플로잇은 7.0.2 버전에서 수정되었으니 해당 버전으로 업그레이드하시면 됩니다. 정말 엄청난 사건이네요.
00:04:40POC 실행에 사용한 리포지토리와 기사는 댓글에서 확인하실 수 있습니다. 그리고 심심하신 분들은
00:04:46Better Stack을 구독하여 최신 기술 소식을 받아보세요. 유용한 정보였기를 바라며,
00:04:50언제나 그렇듯 다음 영상에서 뵙겠습니다.