🇰🇷 한글 설명
plone.app.portlets의 Classic portlet에서 사용자 입력값이 TALES 경로 표현식으로 처리되는 취약점이 발견되었습니다. 인증된 사용자가 조작된 값을 입력할 경우 서버 측에서 임의의 코드가 실행되어 권한 상승이 가능합니다.
💡 쉬운 설명
로그인한 일반 사용자가 웹사이트의 특정 설정 칸에 악성 코드를 입력하여 서버를 직접 조종할 수 있는 보안 결함입니다. 이로 인해 해커가 서버의 제어권을 완전히 탈취할 위험이 있습니다.
🇺🇸 원문 (English)
plone.app.portlets.portlets provides a Plone-specific user interface for plone.portlets, as well as a standard set of portlets that ship with Plone. Starting in version 5.0.0 and prior to versions 5.0.8, 6.0.4, and 7.0.2, the Classic portlet (plone.app.portlets.portlets.classic) used its user-supplied template/macro fields to build a TALES path expression that was then evaluated by the TAL path() helper. Because the value was interpreted as a full TALES expression, a user able to add or edit a Classic portlet could supply a crafted value that escapes simple path traversal and is evaluated as arbitrary code. This is exploitable by any authenticated user who can configure a Classic portlet - which, with the default role map, includes regular users on their personal dashboard. The result is code execution in the context of the Plone process, i.e. a privilege escalation across the trust boundary between an authenticated web user and the server-side process. The problem has been patched in `plone.app.portlets` 5.0.8, 6.0.4, and 7.0.2. Some workarounds are available. Restrict who can manage portlets: remove the `plone.app.portlets.ManageOwnPortlets` permission from untrusted roles, and limit Manage portlets to trusted administrators (usually this is already restricted to the Manager and Site Administrator roles). Where the Classic portlet is not needed, unregister it so it cannot be added. This would need to be done by editing a `portlets.xml` in your own code. One may also effectively disable showing the classic portlet by customising its template. In the Zope Management Interface go to the `portal_view_customizations` tool, locate the `classic.pt` template and click it. Click the Customize button. Remove all text and replace it with `<div>The classic portlet was disabled.</div>`. (This is not a recommended way of customizing a template, but in this case it is quite effective.)
📍 영향받는 시스템
plone.app.portlets 5.0.0 ~ 5.0.7, 6.0.0 ~ 6.0.3, 7.0.0 ~ 7.0.1
⚔️ 공격 벡터
인증된 사용자가 Classic portlet의 템플릿/매크로 필드에 조작된 TALES 경로 표현식을 입력하여 코드 실행
🛡️ 대응 방법
plone.app.portlets를 5.0.8, 6.0.4 또는 7.0.2 이상의 버전으로 업데이트하십시오.
🔧 검증 코드
출력된 버전이 취약한 버전 범위(5.0.8, 6.0.4, 7.0.2 미만)에 해당하는지 확인하십시오.
pip show plone.app.portlets | grep Version
📊 CVSS Vector String
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H
💻 영향받는 소프트웨어
Multi-Domain Security Management Server