VDB
EN
MEDIUM

GHSA-f6wf-28g6-769x

Smarty: Symlink path traversal out of trusted directories

빠른 조치

GHSA-f6wf-28g6-769x — smarty/smarty: 아래 명령으로 수정 버전으로 올리세요.

composer require smarty/smarty:^5.8.2

상세

When Smarty's Security policy is enabled, secure_dir (and the configured template/trusted directories) restrict which local files a template may read via {include} and {fetch}. The trust check in Security::_checkDir() resolved the requested path with Smarty::_realpath(), which normalizes the path as a string only and does not follow symbolic links. A symlink placed inside a trusted directory therefore passed the trust check, while the underlying file_get_contents() followed it to an arbitrary file outside the sandbox (e.g. /etc/passwd).

## Impact An attacker able to (a) cause a symlink to exist inside a trusted directory (e.g. a user-upload area located within the template path) and (b) cause a template to reference that path can read arbitrary files readable by the PHP process, escaping the secure_dir boundary. Confidentiality impact only.

## Patches Fixed in 5.8.2. Security::_checkDir() now resolves the requested file with native realpath() and re-validates the canonical, symlink-free path against the trusted directories (which are canonicalized the same way, so legitimate symlinked deployment paths such as a Capistrano current symlink or macOS /var → /private/var keep working). It falls back to string normalization only when the file does not yet exist on disk.

## Workarounds Ensure no untrusted symlinks can be created within any directory listed in secure_dir/the trusted template directories; restrict write access to those directories to trusted processes only.

## References - Fix commit: 99c048c - CWE-22

이 버전이 영향받나요?

사용 중인 패키지 버전을 입력하면 즉시 평가합니다.

영향 패키지

Packagist / smarty/smarty
최초 영향 버전: 5.0.0 수정 버전: 5.8.2
수정 composer require smarty/smarty:^5.8.2
Packagist / smarty/smarty
최초 영향 버전: 0 수정 버전: 4.5.7
수정 composer require smarty/smarty:^4.5.7

참고