Reddit

Rooted my WiFi Router and managed to get PHP on it

루팅한 공유기에서 PHP 웹사이트를 띄웠다… 공개 운영에는 권한과 설정 노출이 걸림돌

한 사용자가 취약한 설정 가져오기 기능을 통해 공유기에서 명령 실행 권한을 얻고, MIPS용 PHP 8.5.12와 웹 서버를 올려 외부에 사이트를 공개했습니다. 다만 PHP가 root로 실행된다는 작성자의 설명과 공개 페이지의 환경 변수 표시는 일치하지 않으며, phpinfo가 서버 설정과 요청 정보를 드러내는 문제도 있습니다.

본문

공유기에서 PHP 사이트를 운영하려면 어떤 조건이 필요하고, 공개 페이지는 무엇을 드러낼까요? Reddit 사용자 Saptarshi_12345는 공유기 관리 화면의 설정 백업 가져오기 기능에 있던 명령 삽입 취약점을 수동으로 찾아 루팅했다고 설명했습니다. 이후 MIPS용으로 PHP를 교차 컴파일하고 lighttpd와 Cloudflare 터널을 설정해 사이트를 외부에 공개했습니다. 작성자는 포럼 같은 서비스보다 작은 웹사이트를 띄우는 실험이라고 밝혔습니다.

공유기에서 웹 요청을 처리하는 구성

공개된 phpinfo 페이지는 기기가 MIPS 기반 Linux 커널 3.18.21을 실행하고 PHP 8.5.12를 CGI/FastCGI 방식으로 제공한다고 표시합니다. 빌드 설정에는 CLI와 CGI, SQLite, 세션, mbstring 등이 포함됐습니다. 페이지가 표시한 메모리는 전체 412.47MB 중 약 214MB가 남아 있고 저장 공간은 96.2MB 중 약 68MB가 비어 있습니다. 작성자는 Cloudflare 터널이 메모리 약 32MB를 사용한다고 댓글에서 설명했습니다.

이 구성은 PHP 실행 파일과 웹 서버만으로 끝나지 않습니다. 작성자는 라우터에 맞는 MIPS 바이너리를 직접 빌드했고, 사이트 파일은 USB 저장장치 경로인 /mnt/usb1_1에서 제공됩니다. 공유기 펌웨어에 맞는 실행 환경과 웹 요청을 PHP에 넘기는 서버 구성, 외부 접속 경로가 함께 마련된 사례입니다.

버전 숫자와 실제 운영 위험

PHP 공식 발표는 8.5.12를 보안 릴리스로 설명하며 PHP 8.5 사용자에게 업데이트를 권고합니다. 최신 보안 릴리스라는 사실은 해당 버전에서 보안 수정이 제공됐다는 뜻이며, 공개 서비스의 안전성을 보장하지는 않습니다. 실제 위험은 실행 권한, 요청 처리 방식, 설정과 노출 정보에도 달려 있습니다.

작성자는 PHP가 root 권한으로 실행되며 외부 요청으로 서비스 거부 공격을 받을 수 있다고 댓글에서 밝혔습니다. 다만 공개 페이지의 환경 변수에는 USER와 LOGNAME이 r로 나옵니다. 이 문자열만으로 프로세스의 실제 사용자 ID나 접근 권한을 확정할 수 없어, root 실행 주장은 공개 정보만으로 독립 확인되지 않습니다. 페이지에는 disable_functions와 open_basedir도 별도 값이 설정되지 않은 것으로 표시됩니다.

사이트가 공개한 페이지는 PHP의 phpinfo() 출력입니다. PHP 공식 문서에 따르면 이 함수는 PHP 설정과 컴파일 옵션, 서버와 환경 정보, HTTP 헤더 등을 보여줍니다. 따라서 이 사례는 공유기에서 PHP 코드를 실행하는 실험을 보여주는 동시에, 진단용 정보를 공개 웹페이지로 노출하는 운영 방식도 드러냅니다. 공개 자료만으로 실제 사용자 입력을 받는 서비스인지, 요청 제한이나 격리가 있는지는 확인되지 않습니다.

자료: Reddit, PHP / 정리·해설: Trawling

참고 자료