CVE-2026-24061_test.sh
· 6.5 KiB · Bash
Surowy
#!/bin/bash
# Скрипт проверки уязвимости CVE-2026-24061 в GNU InetUtils telnetd
# Уязвимые версии: 1.9.3 - 2.7 (май 2015 - январь 2026)
# by Claude Code 4.5
RED='\033[0;31m'
YELLOW='\033[1;33m'
GREEN='\033[0;32m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
echo -e "${BLUE}========================================${NC}"
echo -e "${BLUE}Проверка уязвимости CVE-2026-24061${NC}"
echo -e "${BLUE}GNU InetUtils telnetd${NC}"
echo -e "${BLUE}========================================${NC}\n"
VULNERABLE=0
# 1. Проверка наличия telnetd
echo -e "${BLUE}[1] Поиск telnetd в системе...${NC}"
TELNETD_PATHS=$(which telnetd 2>/dev/null)
if [ -z "$TELNETD_PATHS" ]; then
TELNETD_PATHS=$(find /usr/sbin /sbin /usr/local/sbin -name "telnetd" 2>/dev/null)
fi
if [ -z "$TELNETD_PATHS" ]; then
echo -e "${GREEN}✓ telnetd не найден в системе${NC}\n"
else
echo -e "${YELLOW}⚠ Найден telnetd:${NC}"
echo "$TELNETD_PATHS" | while read path; do
echo " - $path"
done
echo ""
fi
# 2. Проверка версии GNU InetUtils
echo -e "${BLUE}[2] Проверка версии GNU InetUtils...${NC}"
for telnetd_bin in $TELNETD_PATHS; do
if [ -f "$telnetd_bin" ]; then
# Попытка определить версию
VERSION_OUTPUT=$($telnetd_bin --version 2>&1 | head -n 1)
echo -e "${YELLOW}Файл: $telnetd_bin${NC}"
echo "Вывод --version: $VERSION_OUTPUT"
# Проверка, что это GNU InetUtils
if echo "$VERSION_OUTPUT" | grep -qi "inetutils"; then
echo -e "${YELLOW}✓ Обнаружен GNU InetUtils telnetd${NC}"
# Извлечение версии
VERSION=$(echo "$VERSION_OUTPUT" | grep -oP '\d+\.\d+(\.\d+)?' | head -n 1)
if [ -n "$VERSION" ]; then
echo "Версия: $VERSION"
# Проверка диапазона уязвимых версий (1.9.3 - 2.7)
MAJOR=$(echo $VERSION | cut -d. -f1)
MINOR=$(echo $VERSION | cut -d. -f2)
PATCH=$(echo $VERSION | cut -d. -f3)
# Уязвимы версии >= 1.9.3 и <= 2.7
if [ "$MAJOR" -eq 1 ] && [ "$MINOR" -eq 9 ] && [ "${PATCH:-0}" -ge 3 ]; then
echo -e "${RED}✗ УЯЗВИМАЯ ВЕРСИЯ ОБНАРУЖЕНА!${NC}"
VULNERABLE=1
elif [ "$MAJOR" -eq 1 ] && [ "$MINOR" -gt 9 ]; then
echo -e "${RED}✗ УЯЗВИМАЯ ВЕРСИЯ ОБНАРУЖЕНА!${NC}"
VULNERABLE=1
elif [ "$MAJOR" -eq 2 ] && [ "$MINOR" -le 7 ]; then
echo -e "${RED}✗ УЯЗВИМАЯ ВЕРСИЯ ОБНАРУЖЕНА!${NC}"
VULNERABLE=1
else
echo -e "${GREEN}✓ Версия не входит в уязвимый диапазон${NC}"
fi
else
echo -e "${YELLOW}⚠ Не удалось определить версию${NC}"
fi
else
echo -e "${GREEN}✓ Это не GNU InetUtils telnetd${NC}"
fi
echo ""
fi
done
# 3. Проверка активности telnet-сервиса
echo -e "${BLUE}[3] Проверка активных telnet-сервисов...${NC}"
# Проверка через systemctl
if command -v systemctl &> /dev/null; then
TELNET_SERVICE=$(systemctl list-units --all | grep -i telnet | grep -v grep)
if [ -n "$TELNET_SERVICE" ]; then
echo -e "${YELLOW}⚠ Обнаружены telnet-сервисы:${NC}"
echo "$TELNET_SERVICE"
# Проверка активности
if systemctl is-active --quiet telnet.socket || systemctl is-active --quiet telnetd; then
echo -e "${RED}✗ telnet-сервис АКТИВЕН!${NC}"
VULNERABLE=1
fi
else
echo -e "${GREEN}✓ telnet-сервисы не обнаружены в systemd${NC}"
fi
fi
# Проверка прослушиваемых портов
echo ""
TELNET_PORT=$(netstat -tuln 2>/dev/null | grep ":23 " || ss -tuln 2>/dev/null | grep ":23 ")
if [ -n "$TELNET_PORT" ]; then
echo -e "${RED}✗ Порт 23 (telnet) прослушивается!${NC}"
echo "$TELNET_PORT"
VULNERABLE=1
else
echo -e "${GREEN}✓ Порт 23 не прослушивается${NC}"
fi
# 4. Проверка inetd/xinetd
echo ""
echo -e "${BLUE}[4] Проверка inetd/xinetd конфигурации...${NC}"
if [ -f /etc/inetd.conf ]; then
TELNET_INETD=$(grep -v "^#" /etc/inetd.conf | grep telnet)
if [ -n "$TELNET_INETD" ]; then
echo -e "${YELLOW}⚠ telnet включен в /etc/inetd.conf:${NC}"
echo "$TELNET_INETD"
else
echo -e "${GREEN}✓ telnet не найден в /etc/inetd.conf${NC}"
fi
fi
if [ -d /etc/xinetd.d/ ]; then
TELNET_XINETD=$(grep -r "disable.*=.*no" /etc/xinetd.d/telnet 2>/dev/null)
if [ -n "$TELNET_XINETD" ]; then
echo -e "${YELLOW}⚠ telnet может быть включен в xinetd${NC}"
else
echo -e "${GREEN}✓ telnet не активен в xinetd${NC}"
fi
fi
# 5. Итоговый отчет
echo ""
echo -e "${BLUE}========================================${NC}"
echo -e "${BLUE}ИТОГОВЫЙ ОТЧЕТ${NC}"
echo -e "${BLUE}========================================${NC}"
if [ $VULNERABLE -eq 1 ]; then
echo -e "${RED}✗ СИСТЕМА УЯЗВИМА!${NC}"
echo ""
echo -e "${YELLOW}Рекомендации:${NC}"
echo "1. Немедленно обновите GNU InetUtils до версии > 2.7"
echo "2. Или полностью отключите telnetd:"
echo " - systemctl stop telnet.socket"
echo " - systemctl disable telnet.socket"
echo " - apt remove inetutils-telnetd (Debian/Ubuntu)"
echo " - yum remove telnet-server (RHEL/CentOS)"
echo "3. Используйте SSH вместо telnet"
echo "4. Проверьте логи на предмет попыток эксплуатации"
else
echo -e "${GREEN}✓ Система не уязвима к CVE-2026-24061${NC}"
echo ""
echo "Либо уязвимое ПО не установлено,"
echo "либо установлена безопасная версия."
fi
echo -e "${BLUE}========================================${NC}"
| 1 | #!/bin/bash |
| 2 | |
| 3 | # Скрипт проверки уязвимости CVE-2026-24061 в GNU InetUtils telnetd |
| 4 | # Уязвимые версии: 1.9.3 - 2.7 (май 2015 - январь 2026) |
| 5 | # by Claude Code 4.5 |
| 6 | |
| 7 | RED='\033[0;31m' |
| 8 | YELLOW='\033[1;33m' |
| 9 | GREEN='\033[0;32m' |
| 10 | BLUE='\033[0;34m' |
| 11 | NC='\033[0m' # No Color |
| 12 | |
| 13 | echo -e "${BLUE}========================================${NC}" |
| 14 | echo -e "${BLUE}Проверка уязвимости CVE-2026-24061${NC}" |
| 15 | echo -e "${BLUE}GNU InetUtils telnetd${NC}" |
| 16 | echo -e "${BLUE}========================================${NC}\n" |
| 17 | |
| 18 | VULNERABLE=0 |
| 19 | |
| 20 | # 1. Проверка наличия telnetd |
| 21 | echo -e "${BLUE}[1] Поиск telnetd в системе...${NC}" |
| 22 | |
| 23 | TELNETD_PATHS=$(which telnetd 2>/dev/null) |
| 24 | if [ -z "$TELNETD_PATHS" ]; then |
| 25 | TELNETD_PATHS=$(find /usr/sbin /sbin /usr/local/sbin -name "telnetd" 2>/dev/null) |
| 26 | fi |
| 27 | |
| 28 | if [ -z "$TELNETD_PATHS" ]; then |
| 29 | echo -e "${GREEN}✓ telnetd не найден в системе${NC}\n" |
| 30 | else |
| 31 | echo -e "${YELLOW}⚠ Найден telnetd:${NC}" |
| 32 | echo "$TELNETD_PATHS" | while read path; do |
| 33 | echo " - $path" |
| 34 | done |
| 35 | echo "" |
| 36 | fi |
| 37 | |
| 38 | # 2. Проверка версии GNU InetUtils |
| 39 | echo -e "${BLUE}[2] Проверка версии GNU InetUtils...${NC}" |
| 40 | |
| 41 | for telnetd_bin in $TELNETD_PATHS; do |
| 42 | if [ -f "$telnetd_bin" ]; then |
| 43 | # Попытка определить версию |
| 44 | VERSION_OUTPUT=$($telnetd_bin --version 2>&1 | head -n 1) |
| 45 | |
| 46 | echo -e "${YELLOW}Файл: $telnetd_bin${NC}" |
| 47 | echo "Вывод --version: $VERSION_OUTPUT" |
| 48 | |
| 49 | # Проверка, что это GNU InetUtils |
| 50 | if echo "$VERSION_OUTPUT" | grep -qi "inetutils"; then |
| 51 | echo -e "${YELLOW}✓ Обнаружен GNU InetUtils telnetd${NC}" |
| 52 | |
| 53 | # Извлечение версии |
| 54 | VERSION=$(echo "$VERSION_OUTPUT" | grep -oP '\d+\.\d+(\.\d+)?' | head -n 1) |
| 55 | |
| 56 | if [ -n "$VERSION" ]; then |
| 57 | echo "Версия: $VERSION" |
| 58 | |
| 59 | # Проверка диапазона уязвимых версий (1.9.3 - 2.7) |
| 60 | MAJOR=$(echo $VERSION | cut -d. -f1) |
| 61 | MINOR=$(echo $VERSION | cut -d. -f2) |
| 62 | PATCH=$(echo $VERSION | cut -d. -f3) |
| 63 | |
| 64 | # Уязвимы версии >= 1.9.3 и <= 2.7 |
| 65 | if [ "$MAJOR" -eq 1 ] && [ "$MINOR" -eq 9 ] && [ "${PATCH:-0}" -ge 3 ]; then |
| 66 | echo -e "${RED}✗ УЯЗВИМАЯ ВЕРСИЯ ОБНАРУЖЕНА!${NC}" |
| 67 | VULNERABLE=1 |
| 68 | elif [ "$MAJOR" -eq 1 ] && [ "$MINOR" -gt 9 ]; then |
| 69 | echo -e "${RED}✗ УЯЗВИМАЯ ВЕРСИЯ ОБНАРУЖЕНА!${NC}" |
| 70 | VULNERABLE=1 |
| 71 | elif [ "$MAJOR" -eq 2 ] && [ "$MINOR" -le 7 ]; then |
| 72 | echo -e "${RED}✗ УЯЗВИМАЯ ВЕРСИЯ ОБНАРУЖЕНА!${NC}" |
| 73 | VULNERABLE=1 |
| 74 | else |
| 75 | echo -e "${GREEN}✓ Версия не входит в уязвимый диапазон${NC}" |
| 76 | fi |
| 77 | else |
| 78 | echo -e "${YELLOW}⚠ Не удалось определить версию${NC}" |
| 79 | fi |
| 80 | else |
| 81 | echo -e "${GREEN}✓ Это не GNU InetUtils telnetd${NC}" |
| 82 | fi |
| 83 | echo "" |
| 84 | fi |
| 85 | done |
| 86 | |
| 87 | # 3. Проверка активности telnet-сервиса |
| 88 | echo -e "${BLUE}[3] Проверка активных telnet-сервисов...${NC}" |
| 89 | |
| 90 | # Проверка через systemctl |
| 91 | if command -v systemctl &> /dev/null; then |
| 92 | TELNET_SERVICE=$(systemctl list-units --all | grep -i telnet | grep -v grep) |
| 93 | if [ -n "$TELNET_SERVICE" ]; then |
| 94 | echo -e "${YELLOW}⚠ Обнаружены telnet-сервисы:${NC}" |
| 95 | echo "$TELNET_SERVICE" |
| 96 | |
| 97 | # Проверка активности |
| 98 | if systemctl is-active --quiet telnet.socket || systemctl is-active --quiet telnetd; then |
| 99 | echo -e "${RED}✗ telnet-сервис АКТИВЕН!${NC}" |
| 100 | VULNERABLE=1 |
| 101 | fi |
| 102 | else |
| 103 | echo -e "${GREEN}✓ telnet-сервисы не обнаружены в systemd${NC}" |
| 104 | fi |
| 105 | fi |
| 106 | |
| 107 | # Проверка прослушиваемых портов |
| 108 | echo "" |
| 109 | TELNET_PORT=$(netstat -tuln 2>/dev/null | grep ":23 " || ss -tuln 2>/dev/null | grep ":23 ") |
| 110 | if [ -n "$TELNET_PORT" ]; then |
| 111 | echo -e "${RED}✗ Порт 23 (telnet) прослушивается!${NC}" |
| 112 | echo "$TELNET_PORT" |
| 113 | VULNERABLE=1 |
| 114 | else |
| 115 | echo -e "${GREEN}✓ Порт 23 не прослушивается${NC}" |
| 116 | fi |
| 117 | |
| 118 | # 4. Проверка inetd/xinetd |
| 119 | echo "" |
| 120 | echo -e "${BLUE}[4] Проверка inetd/xinetd конфигурации...${NC}" |
| 121 | |
| 122 | if [ -f /etc/inetd.conf ]; then |
| 123 | TELNET_INETD=$(grep -v "^#" /etc/inetd.conf | grep telnet) |
| 124 | if [ -n "$TELNET_INETD" ]; then |
| 125 | echo -e "${YELLOW}⚠ telnet включен в /etc/inetd.conf:${NC}" |
| 126 | echo "$TELNET_INETD" |
| 127 | else |
| 128 | echo -e "${GREEN}✓ telnet не найден в /etc/inetd.conf${NC}" |
| 129 | fi |
| 130 | fi |
| 131 | |
| 132 | if [ -d /etc/xinetd.d/ ]; then |
| 133 | TELNET_XINETD=$(grep -r "disable.*=.*no" /etc/xinetd.d/telnet 2>/dev/null) |
| 134 | if [ -n "$TELNET_XINETD" ]; then |
| 135 | echo -e "${YELLOW}⚠ telnet может быть включен в xinetd${NC}" |
| 136 | else |
| 137 | echo -e "${GREEN}✓ telnet не активен в xinetd${NC}" |
| 138 | fi |
| 139 | fi |
| 140 | |
| 141 | # 5. Итоговый отчет |
| 142 | echo "" |
| 143 | echo -e "${BLUE}========================================${NC}" |
| 144 | echo -e "${BLUE}ИТОГОВЫЙ ОТЧЕТ${NC}" |
| 145 | echo -e "${BLUE}========================================${NC}" |
| 146 | |
| 147 | if [ $VULNERABLE -eq 1 ]; then |
| 148 | echo -e "${RED}✗ СИСТЕМА УЯЗВИМА!${NC}" |
| 149 | echo "" |
| 150 | echo -e "${YELLOW}Рекомендации:${NC}" |
| 151 | echo "1. Немедленно обновите GNU InetUtils до версии > 2.7" |
| 152 | echo "2. Или полностью отключите telnetd:" |
| 153 | echo " - systemctl stop telnet.socket" |
| 154 | echo " - systemctl disable telnet.socket" |
| 155 | echo " - apt remove inetutils-telnetd (Debian/Ubuntu)" |
| 156 | echo " - yum remove telnet-server (RHEL/CentOS)" |
| 157 | echo "3. Используйте SSH вместо telnet" |
| 158 | echo "4. Проверьте логи на предмет попыток эксплуатации" |
| 159 | else |
| 160 | echo -e "${GREEN}✓ Система не уязвима к CVE-2026-24061${NC}" |
| 161 | echo "" |
| 162 | echo "Либо уязвимое ПО не установлено," |
| 163 | echo "либо установлена безопасная версия." |
| 164 | fi |
| 165 | |
| 166 | echo -e "${BLUE}========================================${NC}" |