一键修复Squid代理服务器严重堆溢出漏洞(CVE-2025-54574)
本项目提供了一个自动化Bash脚本,旨在帮助系统管理员和安全人员快速检测并修复 Squid 代理服务器中的一个严重堆溢出漏洞(CVE-2025-54574)。该漏洞影响 Squid 6.3 及更早版本,攻击者无需认证即可通过网络利用此漏洞,可能导致远程代码执行或服务拒绝。脚本通过简单的执行,即可完成版本检测、配置备份、规则添加和服务重启,从而应用临时缓解措施。
功能特性
- 自动版本检测:脚本会自动检测当前系统安装的 Squid 版本,并与受漏洞影响的版本范围(≤ 6.3)进行比较。
- 智能修复决策:仅在检测到易受攻击的版本时执行后续的修复操作,避免对已安全或更新的系统造成不必要的更改。
-
安全配置备份:在修改配置文件
/etc/squid/squid.conf之前,脚本会自动创建备份文件 (squid.conf.bak),以便在需要时快速回滚。 -
一键应用缓解措施:通过在 Squid 配置文件中添加访问控制列表(ACL)规则,明确阻止所有以
urn:开头的 URL 路径访问,从而切断漏洞利用途径。 - 自动化服务重启:完成配置更改后,脚本会自动重启 Squid 服务,使新配置立即生效。
安装指南
系统要求
- 操作系统:任何支持Bash脚本的Linux发行版(如 Ubuntu, Debian, CentOS, Kali Linux 等)。
- 权限:需要
root或具有sudo权限的用户来执行脚本,以便修改配置文件并重启服务。 - 依赖项:
-
bash:用于运行脚本。 -
bc:用于脚本中的浮点数版本比较。 -
squid:目标软件,其配置文件需位于默认路径/etc/squid/squid.conf。
-
安装步骤
-
下载脚本:将提供的
CVE-2025-54574.sh脚本保存到您的系统中,例如/usr/local/bin/或您的主目录。 -
赋予执行权限:
chmod +x /path/to/CVE-2025-54574.sh -
安装依赖项(如果缺失):
在基于Debian的系统中(如Ubuntu、Kali),您可以使用以下命令安装bc:
在基于Red Hat的系统中(如CentOS),可以使用:sudo apt update sudo apt install bcsudo yum install bc
使用说明
基础使用示例
以 root 权限运行脚本即可启动检测与修复流程:
sudo ./CVE-2025-54574.sh
典型使用场景
- 首次安全响应:当获悉Squid漏洞(CVE-2025-54574)时,立即在您的代理服务器上运行此脚本,作为即时缓解措施,为官方补丁升级争取时间。
- 批量服务器加固:将此脚本集成到自动化运维工具(如 Ansible、SaltStack)中,对多个Squid服务器进行快速统一的安全加固。
- 漏洞验证与修复:安全团队可以使用此脚本来快速验证环境中的Squid服务器是否受到漏洞影响,并一键修复。
脚本执行过程详解
当您运行脚本后,它将依次执行以下操作:
-
检查Squid版本:脚本首先检查Squid版本,如果版本安全,则自动退出。
./CVE-2025-54574.sh # 输出示例: # [*] Checking Squid version... # Installed version: 6.3 # [!] Vulnerable version detected (<= 6.3) # [*] Backing up original config to /etc/squid/squid.conf.bak # ... -
备份并修改配置:如果版本存在漏洞,脚本会备份原配置文件,并追加以下规则来禁用URN访问:
# CVE-2025-54574 mitigation - block URN access acl deny_urn urlpath_regex ^urn: http_access deny deny_urn -
重启服务:最后,脚本会重启Squid服务以应用更改,并输出完成信息。
# [*] Restarting Squid... # [:check_mark:] Mitigation complete.
回滚更改
如果需要撤销脚本所做的更改(例如,您之后升级到了已修复漏洞的Squid 6.4+),可以使用备份文件轻松恢复:
sudo cp /etc/squid/squid.conf.bak /etc/squid/squid.conf
sudo systemctl restart squid
核心代码
核心修复脚本 (CVE-2025-54574.sh)
此脚本是整个解决方案的核心,它包含了版本检测、配置备份和规则应用的全过程。
#!/bin/bash
SQUID_CONF="/etc/squid/squid.conf"
BACKUP_CONF="/etc/squid/squid.conf.bak"
echo "[*] Checking Squid version..."
squid_version=$(squid -v 2>/dev/null | grep Version | awk '{print $3}')
echo " Installed version: $squid_version"
# Extract numeric version (e.g. 6.3)
ver_num=$(echo "$squid_version" | grep -oP '\d+\.\d+')
# Compare version using bc for floating point comparison
if [[ "$(echo "$ver_num <= 6.3" | bc -l)" -eq 1 ]]; then
echo "[!] Vulnerable version detected (<= 6.3)"
else
echo "[+] Version is not vulnerable. No action needed."
exit 0
fi
# Backup the original configuration file before making any changes
if [ -f "$SQUID_CONF" ]; then
echo "[*] Backing up original config to $BACKUP_CONF"
cp "$SQUID_CONF" "$BACKUP_CONF"
else
echo "[!] squid.conf not found at $SQUID_CONF"
exit 1
fi
# Check if the URN access block is already present to avoid duplicates
if grep -q "acl deny_urn urlpath_regex ^urn:" "$SQUID_CONF"; then
echo "[+] URN access already disabled."
else
echo "[*] Adding URN access block to squid.conf..."
# Append the mitigation rules to the configuration file
cat <<EOL >> "$SQUID_CONF"
# CVE-2025-54574 mitigation - block URN access
acl deny_urn urlpath_regex ^urn:
http_access deny deny_urn
EOL
echo "[+] URN access rule added."
fi
# Restart the Squid service to apply the new configuration
echo "[*] Restarting Squid..."
systemctl restart squid
echo "[:check_mark:] Mitigation complete."
```FINISHED
6HFtX5dABrKlqXeO5PUv/84SoIo+TE3firf/5vX8AZ4QO/9Cm0gVAvI017RzuFkP