랜섬웨어 조직 Clop은 이전 사이트 서버가 Grav CMS의 패치되지 않은 취약점을 통해 침해되고 변조된 사실을 확인한 뒤 데이터 유출 사이트를 새로운 Tor 주소로 이전했다. BleepingComputer는 이 결함이 인증 없이 사이트에 접근해야 악용할 수 있는, 문서화되지 않은 경로 순회 취약점이라고 파악했다.
침해는 9월 초에 발생했다. 당시 갈취 그룹 ShinyHunters는 사이트에 작은 텍스트 파일을 업로드한 뒤 그 내용을 Pokémon의 캐릭터 Umbreon 로고와 자사 유출 사이트 링크가 포함된 완전한 변조 페이지로 교체했다. 이후 이 그룹은 Clop의 Tor 서비스에 사용되는 소스 코드, Grav 플러그인, 서버 로그 및 개인 키를 탈취했다고 주장했으며, 파일을 공개하지 않는 대가로 몸값을 요구했다.
Clop 서버에서 무슨 일이 발생했나?
Clop은 서버에 설치된 Grav가 완전히 최신 상태가 아니었다고 인정했지만, 서버에 중요한 운영 데이터나 금융 데이터가 있었다는 주장은 부인했다. 서버에는 사이트 콘텐츠만 포함되어 있었다고 밝혔으며, ShinyHunters와 관계가 있거나 지속적인 협상을 진행 중이라는 주장도 부인했다. 보도에 따르면 ShinyHunters는 이후 자사 사이트에서 Clop의 이름을 삭제했지만, 이에 대한 추가 설명은 내놓지 않았다.
서버는 Grav 1.7.43을 실행하고 있었다. ShinyHunters가 제공한 세부 내용에 따르면, Grav의 파일 업로드 처리 방식은 __unique_form_id__ 매개변수에 안전하지 않은 값을 전달하는 방식으로 악용됐다. 이 값은 먼저 파일 경로의 안전한 구성 요소인지 확인하지 않은 채 tmp/forms/<session_id>/<unique_id> 형식의 임시 경로를 만드는 데 사용됐다.
../../../shhq와 같은 경로 순회 문자열을 입력하면 Grav가 업로드 파일 전용 디렉터리 외부에 경로를 만들도록 강제할 수 있었고, 이를 통해 업로드된 파일을 시스템 설치 영역 내 다른 위치에 기록할 수 있었다.
결함 확인 및 수정 버전 출시
Grav는 BleepingComputer가 공유한 기술적 세부 내용을 검토했으며, 시스템 개발자들은 공격자가 설명한 결함이 정확하다고 확인했다. 이 취약점은 CVE-2026-42608으로 등록됐으며, Grav 2.0과 시험판 버전인 2.0.0-beta.2에서 처음 수정된 경로 순회 취약점이다. 보안 권고는 4월 27일에 발표됐다.
수정 사항에는 허용 목록 [A-Za-z0-9,_-]{1,64}과 일치하는 식별자만 허용하는 sanitizeId() 함수가 추가됐다. Grav는 이 결함이 Form 플러그인이 아니라 시스템 코어에 존재한다고 설명했다. 따라서 해당 사례에 언급된 7.3.0을 포함해 플러그인 버전은 사이트가 취약한지 여부에 영향을 주지 않는다.
실제로 무엇이 달라지는가?
현재 Grav 2.x 버전은 수개월 전부터 보호되고 있었지만, 수정 사항은 여전히 많은 사이트가 사용하는 1.7 브랜치로 이전되지 않은 상태였다. 개발자들에게 익스플로잇 세부 내용이 공유된 뒤 Grav는 1.7 브랜치용 버전 1.7.53.4를 출시했으며, 해당 브랜치 사용자들에게 이 버전으로 업그레이드할 것을 촉구했다.
이번 사건은 오래된 콘텐츠 관리 시스템 브랜치에 의존할 경우 해당 기능과 관련된 플러그인이 최신 상태이더라도 핵심 구성 요소에 알려진 취약점이 남을 수 있음을 보여준다. 또한 유출 사이트를 새로운 주소로 이전한 것은 Clop 측에서 침해로 인한 운영상의 영향을 해결하지만, ShinyHunters가 탈취했다고 주장한 파일에 실제로 민감한 데이터가 포함되어 있었는지를 그 자체로 입증하지는 않는다. Clop은 이를 부인했으며, 출처는 이 주장을 확정할 독립적인 증거를 제시하지 않았다.