핵심 요약
- 환경변수 PATH에 큰따옴표로 감싼 채 물결표(~)를 넣으면 홈 디렉터리로 변환되지 않고 문자 그대로 등록됩니다.
- 이로 인해 홈 디렉터리가 아닌 현재 디렉터리 하위의 의도치 않은 경로가 실행되는 위험이 발생합니다.
- 따라서 물결표(~) 대신 반드시 $HOME 환경변수를 사용해 PATH를 설정해야 합니다.
요약 보안 샌드박싱 도구인 'nono'를 사용하던 한 개발자가 "샌드박스가 쓰기 작업을 허용하는 PATH 항목: ~/.local/bin/"이라는 의심스러운 경고 메시지를 발견하며 파고든 기술적 팁을 다룬 글입니다.
일반적으로 셸 설정 파일(~/.bashrc 또는 ~/.zshrc)에 `export PATH="$PATH:~/.local/bin/"`과 같은 방식으로 경로를 추가하는 개발자가 많습니다. 하지만 bash 문서 명세에 따르면 물결표(~)의 홈 디렉터리 확장은 따옴표로 감싸지 않은(unquoted) 상태에서만 정상적으로 동작합니다. 따라서 큰따옴표 안에서 물결표를 사용하게 되면 `$HOME`으로 치환되지 않고 현재 작업 디렉터리 기준의 문자 그대로의 경로인 `./~/.local/bin/`으로 등록되는 참사가 일어납니다.
작성자가 직접 테스트해 본 결과, 실제로 현재 디렉터리 아래에 `./~/.local/bin/` 디렉터리를 만들고 바이너리를 빌드해 둔 뒤 해당 환경변수로 명령어를 실행하자, 실제 홈 디렉터리가 아닌 현재 디렉터리의 하위 폴더에서 프로그램이 실행되는 것이 확인되었습니다. 큰따옴표를 쓰지 않으면 등호(=)나 콜론(:) 뒤에서 확장이 일어나긴 하지만, 공백 하나만 들어가도 할당이 깨지는 등 매우 취약합니다.
결론적으로 PATH 설정 시 `~` 대신 반드시 `$HOME` 환경변수를 명시해야 합니다. 터미널에서 `echo "$PATH" | grep -- '~'` 명령어를 실행했을 때 물결표가 포함된 경로가 출력된다면, 즉시 설정 파일을 열어 물결표를 `$HOME`으로 수정해야 합니다.
Sponsored · 광고