1. Логинится как обычный пользователь.
2. Делает запрос «загрузи файл».
3. Указывает ID чужого репорта/комментария.
Файл появляется в приватном репорте жертвы так, будто это она его приложила.
Любой авторизованный пользователь может загрузить файл и «приклеить» его к любому чужому репорту, в том числе приватному или во внутреннем чате. Интерфейс будет показывать этот файл как будто его загрузил владелец репорта, не злоумышленник. Это удар по доверию и приватности.
Тест пытается: 1) залогиниться как обычный юзер А, 2) создать файл от имени А, 3) прикрепить этот файл к репорту B (который не принадлежит А). Если API вернуло 200 — билд стопаем. Мы ждём 403.
#!/bin/bash
# attach-hijack-check.sh
# 1. создаём тестовый файл (как user A)
FILE_ID=$(curl -s -X POST "https://staging.example.internal/api/files" \
-H "Authorization: Bearer USER_A_TOKEN" \
-F "file=@poc.jpg" | jq -r '.id')
# 2. пробуем прилепить файл к чужому репорту REPORT_B
STATUS=$(curl -s -o /tmp/resp.txt -w "%{http_code}" \
-X POST "https://staging.example.internal/api/attachFile" \
-H "Authorization: Bearer USER_A_TOKEN" \
-F "reportId=REPORT_B" \
-F "fileId=$FILE_ID")
if [ "$STATUS" = "200" ]; then
echo "[BLOCK] пользователь А может прикреплять файлы к репорту B"
exit 1
fi
echo "[OK] нельзя прилепить файл к чужому приватному репорту ($STATUS)"
exit 0
Этот тест фиксирует бизнес-обещание: «файлы во внутреннем чате и приватных репортах принадлежат только авторам, и никто не сможет незаметно подложить что-то от их имени».
Стандарт: нельзя полагаться на "раз он авторизован — значит ему можно всё". Каждый объект проверяем на владение или явное право.