나는 제로보드가 싫어요!!
아는 사람은 다 안다는 zero_vote 스킨 관련된 취약점 때문에 오늘 한 방 먹었습니다.
CPU 점유율이 이상하게 높아서 프로세스 리스트를 보니 perl 로 만들어진 irc 서버같은게 떠있군요. 덕분에 6시간동안 cpu 안정성 테스트를 할 수 있었습니다. 다행히 일찍(?) 발견했기 때문에 error_log 를 살펴볼 수 있어 어떤 식으로 들어왔는지를 살펴볼 수 있었습니다.
zero_vote 의 취약점을 노리고 code injection 을 통해 wget 으로 nr.txt 를 받아 실행을 시키는 방식이었습니다. acl 을 이용해서 apache 사용자에겐 curl 과 wget 등도 실행시키지 못하도록 막아버려야겠습니다.
zero_vote 스킨에 있는 < ? include "$dir/뭐뭐뭐.php"; ?> 식의 코드가 문제입니다. $dir 변수를 통해 code injection 이 가능하므로 상당히 위험하다고 할 수 있습니다만, 역시나 대부분의 사용자는 그런 세세한 것들에 별 관심이 없기 때문에 관리자들만 죽어나는 것 같습니다.
코드 맨 윗부분에 < ?PHP if(eregi(":\/\/",$dir)) $dir=""; ?> 정도의 코드를 넣어주면 해결할 수가 있는데, 똑같은 문제를 가진 스킨이 하나둘이 아니더군요. 맘 같아선 “rm -rf skin” 을 치고 싶지만 그럴 순 없기에 또 심각하게 고민 해야했습니다.
결국 /usr/share/php/zboard/prevent_hack.php 정도의 파일을 만들어 저 코드를 넣어주고… 사용자들의 제로보드 스킨 디렉토리에 “php_value auto_prepend_file /usr/share/php/zboard/prevent_hack.php
” 를 넣은 .htaccess 파일을 만들어줬습니다. 나중에 생각해보니 어짜피 .htaccess 를 이용할 거면 그냥 skin directory 이하로 register_global 값을 off 로 만들어주는게 훨씬 안전한 해결책이 아니었나 싶습니다.
뭐하튼 결론은 제로보드 즐입니다. -_-;;
p.s) include “$dir/value.php3″ 이니까… http://…../value.php3 라는 공격용 스크립만 만들면 아주 간단히 뚤리는 문제인데, allow_url_fopen 을 막는 것으로도 해결할 수 있을 듯 합니다 :)
Related Posts
This entry was posted by 정태영 on Tuesday, November 15th, 2005 at 7:29 PM and is taged under code injection, Computer, exploit, php, secure, vulnerability, zeroboard, 취약점. You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.
이번엔 누구얌 -_-)
나 제로보드 다 지운지 오래됐엉 으흐헤헤;;
제롭빠한테 업데뜨 좀 하라구 압력 넣어봐;;
농담이구.. 매번 이런거 막을라면 힘들겠당..@.@
하지만 해당 서버에 누군가가 자료 업로드를 할 수 있게 되면 여전히 문제가 됩니당. txt여도 상관없고 jpg여도 상관 없고요. 로컬상에서 include 하니 :// 도 안 들어가요.
업로드해서 뭐라고 저장하는지까지 알아야 되니 조금 어렵겠죠 ;) 그리고 파일이름이 value.php3 로 끝나야 한다는 제약도 있으니까요…
뭐 하튼 제로보드 골치아퍼요 -_-;;
grep 으로 패턴 추출하고 tr 로 전체 치환해도 되지 않나요? 리눅스를 잘 몰라설 ^^;;