CVE-2026-89274 (WP Recipe Maker 임의 숏코드 실행) 분석
방문자가 남긴 별점 후기 한 줄이, 레시피 페이지가 다시 그려질 때마다 서버에서 숏코드로 실행됩니다. WordPress 요리 플러그인 WP Recipe Maker가 후기 본문을 구조화 데이터에 넣기 전에 숏코드를 "지우는" 대신 "실행"하면서 벌어진 일입니다. 계정도 필요 없고, 후기가 한 번 승인되기만 하면 그 뒤로는 모든 방문자에게 자동으로 트리거됩니다.
방문자가 남긴 별점 후기 한 줄이, 레시피 페이지가 다시 그려질 때마다 서버에서 숏코드로 실행됩니다. WordPress 요리 플러그인 WP Recipe Maker가 후기 본문을 구조화 데이터에 넣기 전에 숏코드를 "지우는" 대신 "실행"하면서 벌어진 일입니다. 계정도 필요 없고, 후기가 한 번 승인되기만 하면 그 뒤로는 모든 방문자에게 자동으로 트리거됩니다.
템플릿 엔진에 "이 언어로 표시해 주세요"라고 부탁하는 값 하나가, 알고 보니 파일 경로의 일부로 그대로 이어붙여지고 있었습니다. Apache FreeMarker는 사용자 언어(locale)에 맞는 템플릿을 자동으로 찾아주는 기능에서, 그 언어 이름을 검증 없이 경로에 삽입했습니다. 언어 이름 자리에 `..`를 채워 넣을 수 있다면, 그건 더 이상 언어 이름이 아니라 경로 탈출 명령이 됩니다.
셀카(셀피) 사진으로 로그인하게 해 주는 워드프레스 플러그인 하나가 "무인증 인증 우회" 결함으로 공개됐습니다. 이 플러그인은 **자기가 로그인시켜 달라고 요청받은 신원이 진짜인지 서버에서 전혀 확인하지 않아서**, 아무 권한 없는 공격자가 **관리자를 포함한 어떤 등록 계정으로든** 로그인할 수 있습니다. 로그인의 겉모습(얼굴 인식)은 화려한데, 그 얼굴이 실제로 통과했는지 확인하는 문지기가 빠진 사례입니다.
워드프레스 소셜 로그인 플러그인 하나가 "무인증 인증 우회" 결함으로 공개됐습니다. 문제의 로그인 처리부에는 **인증·인가·논스(요청 위조 방지 토큰) 검사가 하나도 없어서**, 아무 권한 없는 공격자가 그 처리부를 그대로 호출하는 것만으로 다른 사용자의 유효한 로그인 세션을 손에 넣습니다. 로그인의 UX만 붙였을 뿐, 그 로그인이 진짜인지 확인하는 문지기를 빼먹은 사례입니다.
큰 시스템일수록 내부 구성원끼리는 서로를 믿습니다. SAP NetWeaver의 애플리케이션 서버들은 "메시지 서버(Message Server)"라는 중앙 교환대에 자신을 등록하며 하나의 클러스터로 묶입니다. 그런데 이 교환대가 "등록하려는 쪽이 정말 우리 편인가"를 충분히 확인하지 않았습니다. 그 결과 로그인하지 않은 외부 공격자가 자기를 정당한 내부 컴포넌트인 척 등록해, 클러스터의 신뢰를 통째로 빌려 쓸 수 있었습니다. 연구자들은 이 결함에 **S4GET**이라는 이름을 붙였습니다.
클러스터를 이루는 메시징 브로커들은 서로를 처음 찾아낼 때부터 신뢰 관계를 맺습니다. 문제는 "찾아내는 것"과 "인증하는 것"이 같은 순간에 일어나지 않을 때 생깁니다. Apache ActiveMQ Artemis는 브로커가 클러스터 피어를 discovery(자동 탐색)로 찾아 처음 연결을 맺는 바로 그 핸드셰이크 구간에서, 상대가 누구인지 확인하기 전에 관리자 자격증명이 오갈 수 있는 틈을 남겼습니다. 그 결과 네트워크에 발만 걸칠 수 있으면 로그인 없이도 클러스터 관리 자격증명을 가로챌 수 있었습니다.
엔드포인트 포렌식 도구 Velociraptor는 위험한 작업일수록 별도 권한(`EXECVE`)을 따로 요구하도록 설계돼 있습니다. 그런데 같은 작업을 "클라이언트 모니터링"이라는 다른 경로로 예약하면, 그 권한 검사 자체가 통째로 빠져 있었습니다. 검사관(investigator) 등급 정도의 제한된 계정으로 로그인한 사용자가 이 우회로를 타면, 감시 대상 엔드포인트에서 임의 명령을 실행할 수 있었습니다.
기업용 SaaS 플랫폼인 ServiceNow AI Platform(Now Platform)의 **GraphQL Composite Data API**에서, 인증 없이 크래프팅된 요청 하나로 서버 측 코드가 실행될 수 있는 취약점이 보고됐습니다. CVSS 최고점(v4.0 10.0)이 붙은 이유는 단순합니다 — 로그인도, 클릭 한 번도 필요 없이, 데이터를 조회·조합하라고 만든 API 자리에서 코드가 실행되기 때문입니다. 이 글은 GraphQL API가 "질의 언어"에서 "실행 경로"로 뒤집히는 이 부류의 사례로 이 CVE를 읽습니다.
파일 업로드 필터는 대개 "이 확장자는 허용, 저 확장자는 금지"라는 목록 하나에 기댑니다. 문제는 그 목록을 만드는 방식이 느슨할 때 생깁니다. WordPress용 "Drag and Drop File Upload for Elementor Forms" 플러그인은 어떤 확장자를 허용할지를 **요청 파라미터로 받아** 목록에 넣었고(공식 advisory 기준 `type` 파라미터가 MIME 허용목록 키로 쓰이는 점이 근본), 그 목록을 만드는 절차의 빈틈이 겹쳐 검사를 우회할 수 있었습니다. 그 결과 로그인하지 않은 공격자가 PHP 파일을 올려 서버에서 코드를 실행할 수 있었습니다.
인증기관(CA) 체계는 오랫동안 "누가 어떤 도메인에 인증서를 발급했는지" 외부에서 들여다볼 창구가 없었습니다. 인증서 투명성(Certificate Transparency, CT)은 발급된 인증서를 공개 로그에 남겨 이 사각지대를 메우는 장치입니다. 이 글은 CT가 무엇을 해결하려 했고, 어떤 구조로 동작하며, 왜 브라우저가 이를 사실상 의무로 만들었는지를 정리합니다.
웹 방화벽(WAF)을 우회했다는 소식은 특정 제품의 특정 버그처럼 보이지만, 많은 경우 뿌리는 방화벽이 요청을 해석하는 방식과 그 뒤의 애플리케이션이 해석하는 방식이 어긋나는 데 있습니다. 이 글은 그 어긋남의 핵심 개념인 "정규화(canonicalization) 불일치"를 공개된 1차 자료와 연구를 바탕으로 정리합니다.
AI가 코드를 대신 짜주는 플랫폼이 늘면서, 그 코드를 미리 보여주는 "정적 리소스 서빙" 엔드포인트가 새로운 공격면이 되고 있습니다. Yu AI Code Mother의 미리보기 엔드포인트는 사용자가 준 경로를 서버 파일시스템 경로에 그대로 이어 붙였고, 정규화도 상위 디렉토리 필터도 없었습니다. 그래서 인증조차 필요 없는 공격자가 `../`를 실어 미리보기 폴더 바깥의 파일을 읽어낼 수 있습니다.