从后门到修复:Webmin CVE-2019-15107漏洞的完整时间线分析

从后门到修复: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、Webmin的现代化分支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参数中传入| id这样的值,Perl会先执行id命令,然后把输出作为错误信息的一部分。

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

  1. Webmin必须开启“密码重置”功能(默认关闭)
  2. 使用的用户不能是系统用户(如root)
  3. 新旧密码需要符

Read more

【web小工具】dirsearch 安装,用法,例题

原文链接:21.dirsearch:Web 路径扫描工具-ZEEKLOG博客 有错误请各位大佬多多指教~~~ 一、项目介绍 dirsearch 是一款高效、多线程的 Web 路径扫描工具,专为渗透测试人员和网络安全研究人员设计,用于发现目标网站的隐藏目录、敏感文件及未授权接口。其支持自定义字典、代理配置、请求头伪装等功能,适用于红队渗透、漏洞挖掘及资产测绘等场景。 1.1 核心功能 多线程扫描:默认 20 线程,可自定义调整以提高效率。 智能错误处理:自动过滤重复状态码(如 404),降低误报率。 灵活扩展支持: 支持自定义字典(如 -w 指定字典文件)。 支持多种扩展名扫描(如 -e php,asp,aspx)。 结果输出:生成可读性强的报告(TXT/JSON/CSV)

Cursor 3来了:内置Codex,前端福音Design Mode,WorkTree多开

Cursor 3来了:内置Codex,前端福音Design Mode,WorkTree多开

Cursor 3来了:内置Codex,前端福音Design Mode,WorkTree多开 用Cursor这种编辑器,经常遇到两个小痛点:一是他就一个聊天框,如果一个任务时间长一点,侧边栏就被占用,就没法干别的;二是害怕 Agent “一顿操作猛如虎”,直接把当前的主干分支改坏。 刚刚发布的 Cursor 3,重点就在解决这类工作流层面的问题。总体来看,它好像不太满足于做一个带对话窗的编辑器,而是在加强多任务并行和代码环境的安全隔离。 具体有三个最直接影响日常开发的新特性: 1. Agents Window:跑并行的任务控制台 快捷键:Cmd+Shift+P 输入 Agents Window 以前的对话基本是一个单向的线性流。Cursor 3 将 Agent 抽离出了独立的面板区,你可以跨仓库、跨环境(本地、云端或远程 SSH)同时运行多个任务。 配合新增的 Agent Tabs,

WebUI+API双模式:一站式中英翻译服务搭建教程

WebUI+API双模式:一站式中英翻译服务搭建教程 🌐 AI 智能中英翻译服务 (WebUI + API) 在跨语言交流日益频繁的今天,高质量、低延迟的自动翻译系统已成为开发者和企业不可或缺的工具。本文将带你从零开始,搭建一个集 WebUI 与 API 于一体的轻量级中英翻译服务系统,基于 ModelScope 平台的 CSANMT 模型,专为 CPU 环境优化,无需 GPU 即可实现流畅部署。 该方案不仅提供直观易用的双栏交互界面,还开放了标准化 RESTful API 接口,支持快速集成到现有业务系统中。无论是个人学习、内容出海,还是企业级文档处理,都能通过这一套服务实现“开箱即用”的智能翻译能力。 📖 项目简介 本镜像基于 ModelScope 的 CSANMT(Conditional Semantic Augmentation Neural Machine Translation)

Springboot 4.0十字路口:虚拟线程时代,WebFlux与WebMVC的终极选择

Springboot 4.0十字路口:虚拟线程时代,WebFlux与WebMVC的终极选择

🧑 博主简介:ZEEKLOG博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/?__c=1000,移动端可关注公众号 “ 心海云图 ” 微信小程序搜索“历代文学”)总架构师,16年工作经验,精通Java编程,高并发设计,分布式系统架构设计,Springboot和微服务,熟悉Linux,ESXI虚拟化以及云原生Docker和K8s,热衷于探索科技的边界,并将理论知识转化为实际应用。保持对新技术的好奇心,乐于分享所学,希望通过我的实践经历和见解,启发他人的创新思维。在这里,我希望能与志同道合的朋友交流探讨,共同进步,一起在技术的世界里不断学习成长。 🤝商务合作:请搜索或扫码关注微信公众号 “ 心海云图 ” Springboot 4.0十字路口:虚拟线程时代,WebFlux与WebMVC的终极选择 当虚拟线程以革命性的姿态降临Java世界,一场关于并发编程范式的静默变革正在发生。Spring开发者站在了选择的十字路口。 2023年,Java 21将虚拟线程从预览特性转为正式功能,这一变化看似只是JVM内部的优化,实则撼动了整个