
MapTiler Tileserver-php v2.0에서 발생하는 인증되지 않은 파일 읽기
MapTiler Tileserver-php v2.0은 디렉터리 트래버설(Directory Traversal)에 취약합니다. tileserver.php 내의 renderTile 함수는 서버에 파일로 저장된 타일을 웹 요청을 통해 전달하는 역할을 합니다. 파일 경로를 생성할 때 '../'의 사용이 가능하며, 이를 활용하여 웹 서버의 모든 파일을 읽을 수 있습니다. 영향을 받는 GET 매개변수는 "TileMatrix", "TileRow", "TileCol" 및 "Format"입니다.
$name = './' . $tileset . '/' . $z . '/' . $x . '/' . $y;
$mime = 'image/';
if($ext != null){
$name .= '.' . $ext;
}
if ($fp = @fopen($name, 'rb')) {
if($ext != null){
$mime .= $ext;
}else{
//detect image type from file
$mimetypes = ['gif', 'jpeg', 'png'];
$mime .= $mimetypes[exif_imagetype($name) - 1];
}
header('Access-Control-Allow-Origin: *');
header('Content-Type: ' . $mime);
header('Content-Length: ' . filesize($name));
fpassthru($fp);
die;

Martin Herancourt