跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Perl

Webmin CVE-2019-15107 漏洞深度解析:从后门到修复

综述由AI生成Webmin 作为基于 Perl 开发的 Unix/Linux 系统管理工具,因 CVE-2019-15107 漏洞面临严重安全风险。该漏洞允许攻击者在特定条件下通过密码重置功能执行远程命令。文章回顾了漏洞发现过程,分析了 password_change.cgi 中的命令注入点,并强调了旧版本暴露在互联网上的风险。建议管理员立即升级版本或关闭不必要的功能模块以保障服务器安全。

利刃发布于 2026/3/25更新于 2026/6/1122 浏览

Webmin CVE-2019-15107 漏洞深度解析:从后门到修复

2019 年,Webmin 因一个编号为 CVE-2019-15107 的漏洞在安全圈引发了广泛关注。这个看似普通的系统管理工具背后,隐藏着一段从后门植入到最终修复的完整故事。今天我们就来深入聊聊这个漏洞背后的技术细节,看看从代码审计到修复方案,中间到底发生了什么。

1. 序幕:Webmin 是什么,为什么它如此重要

在深入时间线之前,得先搞清楚 Webmin 到底是个什么东西。简单来说,Webmin 是一个基于 Web 的 Unix/Linux 系统管理工具。想象一下,你管理着几十台服务器,每台都要通过 SSH 命令行去配置用户、设置防火墙、管理服务——这活儿既繁琐又容易出错。Webmin 的出现,就是要把这些管理任务都搬到浏览器里,通过直观的图形界面来完成。

我最早接触 Webmin 是在 2015 年,当时接手了一个小公司的服务器运维工作。那家公司没有专职的运维人员,几个开发人员轮流管理服务器,水平参差不齐。有人建议上 Webmin,理由是'点几下鼠标就能搞定,不用记那么多命令'。确实,对于非专业运维人员来说,Webmin 降低了门槛:配置 Apache 虚拟主机、管理用户账户、设置 Cron 任务,这些原本需要一定 Linux 基础的操作,在 Webmin 里变成了表单和按钮。

但便利性往往伴随着风险。Webmin 默认监听 10000 端口,通过 HTTPS 提供服务,需要管理员账号密码登录。听起来挺安全,对吧?问题在于,很多中小企业的管理员为了方便,要么使用弱密码,要么干脆把 Webmin 暴露在公网上,还不做访问限制。更关键的是,Webmin 本身是以 root 权限运行的——这意味着一旦 Webmin 被攻破,攻击者就拿到了服务器的最高权限。

根据 Shodan 等网络空间测绘引擎的数据,在漏洞曝光的 2019 年,全球有超过 13 万台 Webmin 服务器暴露在互联网上。这个数字可能还只是冰山一角,因为很多服务器部署在内网,外部扫描不到。这些服务器中,有企业用于管理内部基础设施的,有云服务商提供给客户的托管面板,甚至还有一些教育机构用来管理实验室机器。

Webmin 的架构特点也值得注意。它完全用 Perl 编写,这在上世纪 90 年代末期项目启动时是个合理的选择,但到了 2019 年,Perl 的流行度已经大不如前。整个系统由大量 CGI 脚本组成,每个管理模块对应一个或多个脚本。这种架构的优点是模块化程度高,容易扩展;缺点也很明显:每个 CGI 脚本都可能成为攻击面,而且 Perl 代码的安全审计相对 PHP、Java 等语言来说,专业的安全研究人员更少。

提示:如果你现在还在使用 Webmin,强烈建议检查版本号。虽然 CVE-2019-15107 已经过去多年,但老版本可能还存在其他未公开的漏洞。最好的做法是升级到最新版本,或者考虑替代方案如 Cockpit、Usermin 等。

2. 事件起点:异常漏洞报告的浮现

时间来到 2019 年 8 月 10 日,这一天在 Pentest 博客上出现了一篇关于 Webmin 漏洞的详细分析。作者声称在 Webmin 的密码重置功能中发现了一个无需身份验证的远程命令执行漏洞,影响版本为 1.920 及之前。漏洞位于 password_change.cgi 文件中,攻击者可以通过向该页面发送特制的 POST 请求,在 old 参数中注入系统命令。

初看之下,这像是一个典型的输入验证漏洞。安全研究人员在审计代码时发现,password_change.cgi 在处理用户修改密码请求时,会检查旧密码是否正确。如果旧密码错误,程序会调用 pass_error 函数显示错误信息。问题就出在这个函数调用上:

$enc eq $wuser->{'pass'} || &pass_error($text{'password_eold'}, qx/$in{'old'}/); 

第二行代码中,qx/$in{'old'}/ 是 Perl 中执行系统命令的语法,相当于反引号。正常情况下,这里应该只是把用户输入的旧密码作为错误信息的一部分显示出来。但代码编写者(或者说,修改者)犯了一个致命错误:他们直接把用户输入的 $in{'old'} 放进了 qx// 操作符中。这意味着如果攻击者在 old 参数中传入 这样的值,Perl 会先执行 命令,然后把输出作为错误信息的一部分。

| id
id

但事情蹊跷的地方在于,这个漏洞的触发条件相当特殊。研究人员很快发现,要成功利用需要满足几个前提:

  1. Webmin 必须开启'密码重置'功能(默认关闭)
  2. 使用的用户不能是系统用户(如 root)
  3. 新旧密码需要符合系统预设的复杂度规则。

目录

  1. Webmin CVE-2019-15107 漏洞深度解析:从后门到修复
  2. 1. 序幕:Webmin 是什么,为什么它如此重要
  3. 2. 事件起点:异常漏洞报告的浮现
  • 💰 8折买阿里云服务器限时8折了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • ClawdBot 本地化语音翻译工作流:Whisper 转写与多语言支持
  • 浏览器 F5 刷新机制深度解析
  • Whisper 语音识别实战:从环境搭建到性能调优
  • AI、AGI、AIGC、NLP、LLM 与 ChatGPT 核心概念解析
  • 图论算法实战:并查集、DFS 与单源最短路
  • 基于 YOLOv13 的无人机电动自行车违规载人检测系统实战
  • 带电/含锂电/储能产品出口的三条合规新变化
  • SpringBoot 4.0 新特性整合项目实战
  • 深入理解 Claude Skills:架构、特性与实战
  • 堆数据结构与字符串处理算法详解
  • 数据结构:带头双向循环链表的定义与实现
  • Spring Cloud 与 Dubbo:微服务架构选型与实战
  • Python Web 开发:Flask 框架入门与实战
  • GSD 元提示系统详解:解决 AI 编程上下文遗忘与效率问题
  • 基于 Node.js + Vue3 的社区物业管理平台技术架构与设计
  • 普通 AI 与 OpenClaw 核心差异及自动化场景解析
  • 大模型落地:追求极致的务实主义
  • OpenClaw 安装与飞书机器人全流程配置指南
  • 前端 CI/CD 流程与自动化部署实践
  • VSCode Copilot 登录失败常见问题与高效解决方案

相关免费在线工具

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online

  • JSON 压缩

    通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online

  • JSON美化和格式化

    将JSON字符串修饰为友好的可读格式。 在线工具,JSON美化和格式化在线工具,online