- If a folder for which your user has write permission is located in the path, you could potentially hijack an application to run a script. - **PATH** in Linux is an environmental variable that tells the OS where to search for executables. - For any command that is not built into the shell or that is not defined with an absolute path, Linux will start searching in folders defined under PATH. A simple search for writable folders using [[find]] ```bash find / -writable 2>/dev/null find / -type d -writable 2>/dev/null | cut -d "/" -f 2 | sort -u find / -type d -writable 2>/dev/null | cut -d "/" -f 2,3 | sort -u ``` adding `/tmp` in `PATH` env variable. ```bash echo $PATH export PATH=/tmp:$PATH ``` ```bash cd /tmp echo "/bin/bash" > wook chmod 777 wook ``` --- # PATH 하이재킹: 권한 상승 공격 이해하기 간단히 말해, PATH 하이재킹은 시스템이 특정 프로그램을 찾을 때 우리가 만든 악성 프로그램을 대신 실행하도록 속이는 방법이다. 공격 원리 - 시스템에 `path_script`라는 프로그램이 있다고 가정하자. - 이 `path_script`는 루트 권한으로 실행되도록 설정되어 있다. **중요** - `path_script`의 역할은 내부적으로 다른 `wook`이라는 프로그램을 실행하는 것이다. - 문제는 `path_script`가 `wook`프로그램을 실행할 때 `/usr/bin/wook`처럼 정확한 위치 (절대 경로)를 지정하지 않고 그냥 "wook"이라고만 호출한다는 점이다. - 여기서 취약점이 발생! `path_script`가 `wook`의 정확한 위치를 모르기 때문에 `PATH` 환경 변수에 있는 폴더들을 뒤져서 `wook`을 찾으려고 한다. 공격 단계 1. 내가 '쓰기' 권한을 가진 폴더를 찾는다. 1. `echo $PATH`로 변수에 어떤 폴더들이 지정되어 있는지 확인. 2. `PATH` 변수에 있는 폴더들 중에서 내가 파일 쓰기 권한을 가진 폴더가 있는지 확인. 3. `PATH` 변수에 내가 '쓰기' 권한을 가진 폴더가 없다면 내가 쓰기 권한을 가진 폴더, 예를 들어 `/tmp`,를 `PATH`의 가장 앞부분에 추가한다. (`export PATH=/tmp:$PATH`). 이렇게 되면 시스템이 프로그램을 찾을 때 `/tmp` 폴더를 가장 먼저 확인한다. 2. 가짜 `wook` 프로그램 만들기. 1. `/tmp`에 `wook`이라는 같은 이름의 프로그램을 만든다. 2. `echo "/bin/bash" > wook` 3. 권한 상승 1. 우리가 만든 가짜 `wook` 프로그램을 만든 상태에서, 루트 권한으로 실행되는 `path_script`를 실행한다. 2. `path_script`는 `wook`프로그램을 찾기 위해 `PATH` 변수를 확인한다. 3. `/tmp` 가 `PATH` 변수 가장 앞에 있기 때문에 `path_script`는 `/tmp`에 만들어둔 가짜 프로그램을 먼저 발견하고 실행하게 된다. 4. 여기서 중요한 점은 `bash_script`가 root 권한으로 실행되기 때문에, `path_script`에 의해 실행되는 우리의 가짜 `wook` 프로그램 역시 root 권한으로 실행된다는 것!