🇰🇷 한글 설명
Grav 1.7.0 이상 2.0.9 미만 버전에서 원격 코드 실행(RCE) 취약점이 발견되었습니다. FlexDirectory::dynamicDataField() 함수가 공격자가 조작한 입력값을 검증 없이 call_user_func_array()로 실행하여, 인증된 사용자가 서버에서 임의의 셸 명령어를 실행할 수 있습니다.
💡 쉬운 설명
권한을 가진 사용자가 특수하게 조작된 데이터를 입력하면 서버를 마음대로 조종할 수 있는 보안 구멍이 있습니다. 이를 통해 해커가 서버에 악성 명령을 내려 시스템을 장악할 수 있습니다.
🇺🇸 원문 (English)
Grav versions >= 1.7.0 and before 2.0.9 contain a remote code execution vulnerability. FlexDirectory::dynamicDataField() resolves blueprint data-*@: directives by calling call_user_func_array() on attacker-influenced input, validating only that the target is callable (is_callable()) without restricting dangerous functions such as exec, system, passthru, or shell_exec. Because FlexDirectory registers this handler for every Flex directory, it bypasses the validation added to Blueprint::dynamicData() in 2.0.7 (GHSA-fj2p-qj2f-74v5). Any authenticated user with create or update permission on any Flex-based directory (Flex Users, Flex Pages, Flex Objects, or custom Flex types) can execute arbitrary shell commands on the server.
📍 영향받는 시스템
Grav versions >= 1.7.0 and < 2.0.9
⚔️ 공격 벡터
Flex 기반 디렉토리에 대한 생성 또는 수정 권한을 가진 인증된 사용자가 조작된 blueprint 데이터를 입력하여 공격
🛡️ 대응 방법
Grav를 최신 버전(2.0.9 이상)으로 즉시 업데이트하십시오.
🔧 검증 코드
출력된 Grav 버전이 2.0.9 미만인지 확인하여 취약 여부를 판단합니다.
grep -r "version" composer.json 2>/dev/null || echo 'Check Grav version via admin panel or CLI'