🔍 CVE-2026-82557

6.9
CVSS Score
MEDIUM
2026-11-01
2026-11-02 16:13
✅ 완료

🇰🇷 한글 설명

Apache Wicket의 Form 컴포넌트가 요청 파라미터로 전달된 제출 버튼을 가시성 및 활성화 여부 검사 없이 처리하여, 애플리케이션이 제공하지 않은 버튼의 onSubmit 등이 실행될 수 있습니다. 10.3.0부터 10.11.0 버전이 영향을 받으며 10.12.0에서 수정되었습니다.

💡 쉬운 설명

화면에서 숨겨지거나 비활성화된 버튼도 요청 조작으로 강제로 실행될 수 있는 권한 검사 누락 문제입니다. 해당 버튼이 보호하던 기능이 사용자 권한과 무관하게 동작할 수 있습니다.

🇺🇸 원문 (English)

Missing authorization in Apache Wicket. org.apache.wicket.markup.html.form.Form resolves the component that submitted a form from the request parameters in Form#onRequest() and passes the result directly to Form#onFormSubmitted(IFormSubmitter). The check that the submitting component is visible and enabled in its hierarchy runs only when onFormSubmitted() is given no submitter, so it no longer runs for an ordinary form submission, and it is the only point at which Wicket verifies that the application actually offered the named control to the caller. Form#findSubmitter() matches on the request parameter name alone and applies no visibility or enablement filter, and the request handler checks only the form itself, which is visible and enabled. A request that names a submit button the application withheld therefore reaches that button's onSubmit() and onAfterSubmit(), and its onError() when form validation fails; where the button sets setDefaultFormProcessing(false) it reaches onSubmit() and onAfterSubmit() without any form validation. An application is affected where a form submitting component, such as a Button or a SubmitLink, is unavailable to the caller while the enclosing form remains available. How the component was made unavailable does not matter: the component's own setVisible(false), setEnabled(false) or setVisibilityAllowed(false), an overridden isVisible() or isEnabled(), an invisible or disabled parent container anywhere above it, and a RENDER or ENABLE denial from IAuthorizationStrategy — for example through MetaDataRoleAuthorizationStrategy or the AuthorizeAction annotation — are all enforced by that one check, and all of them are bypassed. A component that renders as disabled carries its own input name in the markup the caller already holds. Submissions made through AjaxFormSubmitBehavior, and therefore through AjaxButton and AjaxSubmitLink, are not affected: those are invoked as a behaviour on the button itself, the behaviour's invocation is authorized against that button, and the non-Ajax callbacks of those two classes do nothing. Restrictions applied to the form or to the page rather than to the submitting component are unaffected. The 9.x and 8.x release lines, and the unsupported lines before them, are not affected; the behaviour was introduced in 10.3.0. This issue affects Apache Wicket: from 10.3.0 through 10.11.0. Users are recommended to upgrade to version 10.12.0, which fixes the issue.

📍 영향받는 시스템

Apache Wicket 10.3.0 ~ 10.11.0 (10.12.0 이상으로 업그레이드 필요)

⚔️ 공격 벡터

공격자가 숨김 또는 비활성화된 제출 버튼의 input name을 포함한 HTTP 폼 요청을 직접 전송하여 해당 버튼의 onSubmit 로직을 실행

🛡️ 대응 방법

Apache Wicket을 10.12.0 이상으로 업그레이드하고, 중요 버튼은 서버 측에서 별도로 권한을 재검증

🔧 검증 코드

결과에 나타나는 wicket 버전이 10.3.0~10.11.0 사이이면 취약하고, 10.12.0 이상이거나 해당 범위 밖이면 영향받지 않습니다 (버전이 변수로 지정된 경우 해당 속성 값을 확인).

Shell / Script
grep -ri 'wicket' --include=pom.xml --include=build.gradle --include=*.gradle . 2>/dev/null | grep -E 'wicket.*version|wicket-core'

📊 CVSS Vector String

CVSS Vector
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:L/VA:N/SC:N/SI:N/SA:N