Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
shiro-check — 실제 설치된 Apache Shiro 모듈과 버전을 스캔해 공식 CVE 26개 중 실제로 해당되는 항목을 하나씩 판정합니다. 「CVE × 모듈」 기준으로 판정하며, 제로 의존성 단일 jar입니다. CVE-2026-49268 | Kitploit
도구/GitHubGitHub/xiaoqimikko/shiro-check
Static AnalysisVulnerability ScannersVulnerability AnalysisDevSecOpsSupply Chain Security
GitHubxiaoqimikko/shiro-check

shiro-check

실제 설치된 Apache Shiro 모듈과 버전을 스캔해 공식 CVE 26개 중 실제로 해당되는 항목을 하나씩 판정합니다. 「CVE × 모듈」 기준으로 판정하며, 제로 의존성 단일 jar입니다. CVE-2026-49268

저장소 보기
8일 전아직 검토되지 않음

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

shiro-check

실제로 설치된 Apache Shiro 모듈과 버전을 스캔하여, 공식 26개 CVE 중 어떤 것이 실제로 해당되는지 항목별로 판정합니다.

의존성 없는 단일 jar, 인터넷 미사용, pom을 읽지 않음 — 빌드 산출물(jar / war / fat jar / 디렉터리)을 직접 스캔합니다.

root@kitploit:~
java -jar shiro-check.jar --utf8 your-app.jar

왜 「버전 번호만 쓱 보고 끝」이 아닌가

Shiro의 CVE는 'Shiro'에 붙어 있는 것이 아니라, 구체적인 모듈에 붙어 있습니다. 같은 번호라도 모듈이 다르면 규칙이 다릅니다:

CVE영향받는 모듈shiro-core만 사용하는 경우
CVE-2020-17510shiro-spring해당 없음
CVE-2020-17523shiro-web / shiro-spring / shiro-spring-boot-starter해당 없음
CVE-2023-34478shiro-web해당 없음
CVE-2026-56091shiro-guice해당 없음

공식 26개 중 13개는 shiro-core와 전혀 관계가 없습니다. 이들을 'Shiro < 1.7.1에 취약점이 있다'는 한 문장으로 압축하는 것은 사용자가 스스로 내려야 할 판단을 대신 내려 주는 것이며 — 게다가 틀린 판단입니다.

이 도구의 판정 단위는 CVE × 모듈입니다. 26개 CVE가 7개 모듈을 포괄하는 37개 규칙으로 확장됩니다.

좌표 매칭으로는 보이지 않는 세 가지

1. Dependabot 경고에 들어가지 못하는 5개 항목

Dependabot은 의존성 좌표를 기준으로 GitHub advisory를 매칭합니다. 26개 중 5개는 매칭되지 않습니다:

그런데 shiro-root는 packaging=pom인 부모 POM이며 — Maven Central에 해당하는 jar가 없고(HTTP 404), 어떤 프로젝트도 이를 의존하지 않으므로 좌표 매칭으로는 영원히 매칭되지 않습니다.

ℹ️ unreviewed는 GitHub의 정상적인 처리 상태입니다(NVD 자동 가져오기, 아직 영향받는 패키지가 수동으로 표시되지 않음), 좌표 매칭도 합리적인 설계입니다. 여기서는 '경고에 들어가지 못한다'는 사실만 서술할 뿐, 누군가 잘못 보고했다는 뜻은 아닙니다.

2. uber jar 안에 다른 모듈이 숨어 있음

shiro-all은 여러 모듈을 묶어 넣은 uber jar입니다. 실제 측정 결과 shiro-all-1.3.2.jar 내부에는 6개의 META-INF/maven/org.apache.shiro/<모듈>/pom.properties가 있습니다:

root@kitploit:~
shiro-all  shiro-core  shiro-web  shiro-spring  shiro-ehcache  shiro-quartz

즉, pom에 shiro-all만 적어 둔 프로젝트는 좌표상으로는 이름이 하나뿐이며(26개 중 CVE-2016-6802만 이 좌표에 연결됨), jar 안에는 실제로 core / web / spring 세 모듈의 코드가 들어 있습니다.

실물을 스캔하면 이 층위가 드러납니다. 실제로 shiro-all-1.3.2.jar 하나를 스캔했을 때, 이 도구는 3개 모듈에 걸친 20개 항목을 보고합니다.

3. 3개 항목의 공식 수정 버전은 Maven Central에서 받을 수 없음

3개 advisory의 first_patched_version은 3.0.0-alpha-2인데, 이 버전은 Maven Central에 게시된 적이 없습니다(공식은 바로 3.0.0 정식 버전을 출시했습니다). 이 버전을 기준으로 업그레이드하려 해도 업그레이드할 수 없습니다 — 이 도구는 이를 표시해 주고, 업그레이드 권장 사항을 실제로 받을 수 있는 버전으로 바꿔 줍니다.

판정은 '걸렸다'는 뜻이 아님

'적중' = 해당 모듈이 존재하고 버전이 공식 영향 범위에 속함. '이미 악용됨' 또는 '반드시 악용 가능함'을 의미하지는 않습니다.

26개 중 대다수는 특정 구성이 있어야 성립하므로, 도구는 이를 구분하여 나열합니다:

  • 🔴 기본 구성으로도 영향받음 — 우선 처리(예: CVE-2026-43827 session fixation)
  • ⚠️ 특정 조건 충족 필요 — 항목별로 조건을 제시하며, 충족하지 않으면 영향받지 않음

조건 예시(공식 설명 원문과 한 글자씩 대조, 외삽하지 않음):

root@kitploit:~
CVE-2026-49268  仅当使用 DefaultLdapRealm(用户名未转义即拼进 LDAP DN)
CVE-2023-22602  仅当与 Spring Boot 2.6+ 一起使用,且未把
                spring.mvc.pathmatch.matching-strategy 设回 ant_path_matcher
CVE-2026-23903  仅当静态文件放在大小写不敏感的文件系统上(如 macOS 默认设置),
                且 Shiro 里只配了小写的 filter 路径;只影响静态文件

🔴 이 도구는 사용자의 구성을 해석하지 않습니다. shiro.ini / application.yml / Java 코드 어디에서든 Shiro를 구성할 수 있기 때문에, 해석해서 내린 결론은 해석하지 않는 것보다 더 위험합니다. 조건을 명시적으로 나열하므로 직접 판단하세요 — 이는 의도된 설계이지, 게으름이 아닙니다.

사용법

root@kitploit:~
# 扫一个 jar / war
java -jar shiro-check.jar your-app.jar

# 扫整个目录(递归)
java -jar shiro-check.jar /path/to/libs

# 连「不适用」的条目也列出来
java -jar shiro-check.jar --all your-app.jar

# Windows 控制台中文乱码时
java -jar shiro-check.jar --utf8 your-app.jar

인식 가능 대상: 일반 jar · Spring Boot fat jar(BOOT-INF/lib/)· 기존 WAR(WEB-INF/lib/)· uber jar(shiro-all, 내부 포함 모듈까지 확장)· 이름이 변경된 jar(pom.properties 기준)· 백슬래시로 경로를 표기한 비정상 아카이브.

JDK 17+ 필요. 런타임 의존성 없음.

판정 테이블은 어떻게 만들어졌나

한 줄도 수기로 옮겨 적지 않습니다. tools/gen_rules.py가 두 개의 1차 소스에서 생성합니다:

소스제공 내용
shiro.apache.org/security-reports.html전체 항목, 설명 원문, 트리거 조건 원문
GitHub Advisory API영향받는 모듈 좌표, 구조화된 버전 범위, 등급

생성 과정에는 **12개의 단언(assertion)**이 있으며, 하나라도 충족되지 않으면 파일을 쓰지 않고 중단합니다('파싱이 실패해 빈 껍데기 테이블이 생성되어도 테스트는 여전히 모두 통과'하는 상황을 방지):

  • 완전성: 본문 h3 기준과 목차 앵커 기준으로 동일한 CVE 집합이 세어져야 함
  • 출처 추적: 수동으로 입력한 버전 범위의 버전 문자열은 공식 원문에 한 글자씩 그대로 나타나야 함
  • 실측: 모듈 소속은 실제 jar 안의 클래스 위치로 입증되어야 함('이 항목은 web에 속한다고 기억함'은 인정하지 않음)
  • 실행 가능성: 각 수정 버전을 Maven Central에서 한 번씩 조회하고, 받을 수 없는 것은 표시함
  • 주장: Dependabot 사각지대 항목 수, 모듈 간 차이, uber jar 내부 포함 모듈 — 모두 여전히 성립해야 함

게시 전에 tools/recheck_before_publish.py로 두 번째 독립된 기준을 사용해 핵심 논거를 다시 검증합니다(생성 스크립트를 import하지도, 그 출력을 읽지도 않습니다 — 동일한 파싱 로직을 재사용하면 버그까지 함께 재현되기 때문입니다).

한계

  • 공식 security-reports 페이지의 26개 항목만 다루며, 비공개 문제나 서드파티 통합 문제는 포함하지 않음
  • 버전 범위는 공식 자료와 GitHub에서 가져오며, 둘의 기준이 드물게 다를 경우 모듈 좌표의 구조화된 범위를 기준으로 함
  • 구성을 해석하지 않으므로 조건부 항목은 직접 충족 여부를 판단해야 함
  • 판정 테이블은 생성 시점의 스냅샷이며, GitHub는 언제든 unreviewed를 reviewed로 바꿀 수 있음

영어

shiro-check는 빌드 산출물(jar / war / fat jar / 디렉터리)을 스캔하여 실제로 포함된 Apache Shiro 모듈을 찾아낸 다음, 정확한 모듈 + 버전 조합을 기준으로 공식 26개 CVE를 모두 평가합니다.

존재 이유: Shiro CVE는 'Shiro'가 아니라 모듈에 귀속됩니다. 26개 중 13개는 shiro-core와 전혀 관계가 없습니다. 이 도구는 CVE × 모듈 단위(37개 규칙, 7개 모듈)로 동작합니다.

좌표 기반 매칭으로는 볼 수 없는 세 가지:

  1. 5개 항목은 Dependabot 경고에 도달하지 못함 — 3개 advisory는 여전히 unreviewed이며 영향받는 패키지 목록이 비어 있음. 2개는 org.apache.shiro:shiro-root에만 연결되어 있는데, 이는 Maven Central에 jar가 없는(HTTP 404) packaging=pom 부모 POM이므로 어떤 프로젝트도 이를 의존하지 않음.
  2. shiro-all은 uber jar임 — shiro-all-1.3.2.jar에는 6개의 pom.properties 항목 (core, web, spring, ehcache, quartz + 자체)이 들어 있음. pom에는 하나의 좌표만 표시되지만 jar에는 세 모듈 분량의 코드가 담겨 있음.
  3. 3개 advisory는 수정 버전으로 3.0.0-alpha-2를 가리키는데, 이 버전은 Maven Central에 게시된 적이 없음. 도구는 이를 표시하고 실제로 업그레이드할 수 있는 버전을 권장함.

'적중'은 모듈이 존재하고 버전이 공식 영향 범위 내에 있음을 의미합니다. 악용 가능함을 의미하지는 않습니다 — 대부분의 항목은 특정 구성이 필요하며, 도구는 이를 공식 advisory에서 원문 그대로 나열합니다. 구성은 의도적으로 해석하지 않습니다.

root@kitploit:~
java -jar shiro-check.jar [--all] [--utf8] <jar | war | directory> ...

JDK 17+ 필요. 런타임 의존성 없음. 규칙 테이블은 두 개의 1차 소스에서 생성되며, 실패 시 중단되는 12개의 단언(assertion)이 적용됩니다. tools/gen_rules.py 참조.

라이선스

Apache License 2.0

도구 다운로드
항목매칭되지 않는 이유
CVE-2026-56091(shiro-guice 인증 우회, high)advisory가 여전히 unreviewed이며 영향받는 패키지가 비어 있음
CVE-2026-56130(RememberMe 쿠키 만료되지 않음)위와 동일
CVE-2014-0074(LDAP 빈 암호 우회)위와 동일
CVE-2023-22602(Spring Boot 2.6+ 인증 우회, high)advisory가 org.apache.shiro:shiro-root에만 연결됨
CVE-2010-3863위와 동일