软件安全访谈:ZipSlip、NodeJS安全性和BBS攻击
正如Nodejs Security WG成员和Snyk开发者布道师Liran Tal所写的那样,自BBS早期以来,这种漏洞利用的矢量攻击已经为人所知。InfoQ采访了Tal,了解了更多有关软件安全性(尤其是Nodejs安全性)的相关信息。
今年早些时候,Bower软件包管理器被发现在解压缩包方面存在漏洞,攻击者可以在用户磁盘上写入任意文件。正如Nodejs Security WG成员和Snyk开发者布道师Liran Tal所写的那样,自BBS早期以来,这种漏洞利用的矢量攻击已经为人所知。
据安全研究人员skyn3t在2019年1月1日报道,攻击者可以通过一个恶意zip存档来利用符号链接的不正确验证在zip解压缩目录之外写入任意文件。根据Tal的说法,在使用Bower时,启用路径遍历的罪魁祸首是一个小小的Nodejs包——decompress-zip,但这种情况并不只在这里出现。事实上,这种漏洞也已经在其他几个生态系统中找到,包括JavaScript、Ruby、.NET、Go和Java,并且似乎影响了数千个项目,因此它被称为ZipSlip。令人感到震惊的是,ZipSlip使用的基本攻击向量已经是众所周知的,并且自Bulletin Board Systems(BBS)早期以来可能已经被多次利用。
InfoQ借此机会采访了Tal,了解了更多有关软件安全性(尤其是Nodejs安全性)的相关信息。
InfoQ:你能介绍一下自己并简要描述一下你在Snyk做什么吗?
Liran Tal:我做过很长一段时间的软件开发,最近五年在带Web开发团队。我是作为一名开发者布道师加入Snyk的,任务是帮助其他开发人员使用开源软件并保证安全,并进一步扩展我在Node.js和JavaScript生态系统安全性方面的工作。在Snyk工作是非常棒的经历,我在这里认识了很多人,并且我在以前的几个公司也使用过snyk。
InfoQ:全球统计数据显示,软件漏洞在过去几年中一直在稳步增长,对软件系统产生了很大的影响,从基本组件(CPU、操作系统、网络栈等)到面向用户的应用程序,从而可以以前所未有的规模窃取用户数据。这是不是说明我们的系统变得越来越脆弱,越来越复杂,还是对安全的重要性有了更多认识?
Tal:我认为你说得没错。毫无疑问,系统已经变得越来越复杂,而且我们今天看到的抽象比20年前要多得多。并不是说这很糟糕,但它确实增加了复杂性并增加了所需的技能和专业知识。
系统变得更容易受到攻击并非有意的,但我确信所有开发人员都能够理解——我们添加的代码越多,存在错误和安全漏洞的风险就越高。近十年来,开源软件得到了广泛的应用,这对于任何一个从开源软件运动早期就开始接触开源软件的人来说,都是令人惊讶和真正振奋人心的。与此同时,这意味着我们使用可能由很多开发人员(或者说是陌生人)构建的软件组件来构建我们的产品,而我们对他们的安全知识一无所知,也不知道他们评审代码库的频率是怎样的(如果有的话)。
我真的很高兴你提到了这个话题,因为我在过去几周里一直在努力制作一份报告,报告揭示了有关开源安全状态的详细信息和真实数据。它关注应用程序库、系统库以及开源开发人员和维护人员的状态。我们了解到了一些有关代码库安全方面的有趣内容,例如他们是如何发现安全漏洞的,以及他们的CI中有多少是包含了自动化安全测试。Snyk去年也发布了一份报告,2019年的最新报告将在几周后发布。
总的来说,我认为E.S Raymond说得对,所有的缺陷都是很浅层的。作为一个平台,GitHub极大地降低了参与开源社区的门槛,在我看来,这是对采用开源的重大贡献。它使代码库相对容易经受安全评审,并与维护人员就漏洞和修复问题进行交流。我们从去年的报告中收集到的一个有趣指标是,引入代码库的漏洞所需的最长时间为5.9年。对于一个漏洞来说,藏在源代码中直到有人发现并被公开,5.9年已经是很长时间了。我们研究过的一些流行的库,中位数时间是2.5年。
InfoQ:说到你的专业领域NodeJS,你最近在Bower(一个目前仍在广泛使用的软件包管理器)中发现了一个漏洞。但更令人担忧的是NPM(NodeJS/JavaScript生态系统的包管理器)的安全状态。开发人员应该做些什么来最小化交付软件的风险?
Tal:因为问题太普遍了,以至于解决这些问题可能有点令人望而生畏。说到NPM的安全性,有两个方面需要提一下——NPM注册表本身的安全性及其开发人员和维护人员的平台安全性。前者在过去曾被批评有米有在采取适当措施为生态系统提供安全基础。后者是托管在NPM注册表上的JavaScript源代码集合中的安全级别。
尽可能早地考虑安全性是认真对待安全性的一个好的开始。Tanya Janca说,首先,这是一种安全思维,理解安全问题是每个人的工作。将安全问题作为设计和代码评审流程的一部分,然后在日常开发流程中继续集成一组支持安全性的流程和工具。
例如,采用静态代码分析插件作为构建过程的一部分,或者扫描项目中的开源依赖项漏洞,Snyk在这方面做得最好,因为它拥有非常全面的漏洞数据库,而且它还提供了报告漏洞的方法,并通过升级依赖项所需的最小semver变更自动创建拉取请求。
安全性并没有止步于使用CI集成来扫描漏洞。请考虑一下这种情况——你开发了一个Web应用程序,将其发布到生产环境中,然后继续下一个项目。旧代码没有继续维护,但正如我们从最近的报告和多年的安全经验中了解到的那样,漏洞将会在稍后出现。那么怎样才能知道是不是出现了漏洞呢?你需要随时监控项目的依赖项,以便在发现安全问题时可以返回项目并修复漏洞。snyk就提供了这些东西,可以将它集成到整个软件开发生命周期中。
你之前提到了Bower漏洞的一个有趣的事实——它与去年snyk的安全团队所做的研究有关,并且在大约二十年前的一篇有关Phrack的文章中首次提到过。这些研究工作揭示了数以千计的项目容易受zip压缩包行为漏洞的影响,这些行为可能导致写入任意文件和潜在的远程代码执行。这进一步说明了使用开源软件的影响,一个库中的漏洞可以在数千个项目和代码库中体现出来。
可以想象,像NPM、yarn或Bower这样的供应链服务都需要做一些与压缩包相关的事情,而Bower特别容易受到几种类型的ZipSlip漏洞的攻击。如果有人对概念验证感兴趣,想知道它的原理,我可以介绍这个故事,并一步一步说明如何利用这个漏洞。
InfoQ:在NodeJS生态系统中,是否应该在更加结构化的层面上进行一些努力?
Tal:从Node.js的角度来看,安全工作组的任务是负责为Node.js创建一个更安全的生态系统,同时也是间接为整个JavaScript生态系统创建一个更安全的生态系统。
我们正在积极地评审和改进安全焦点,例如相关的Node.js API、安全代码评审和Noe.js核心的安全测试工作。工作组还充当了NPM Registry中的第三方生态系统模块以及Node.js核心的事件响应团队。
有一些外部力量在为社区提供安全知识,例如Node.js安全路线图,以及巩固安全资源的努力,例如我自己的awesome-nodejs-security。我们希望从安全工作组内部看到更多这样的东西。
为了提高Node.js生态系统的安全性,有很多努力和举措。InfoQ将继续对此进行报道,并及时让读者知道。
查看英文原文:https://www.infoq.com/news/2019/02/zipslip-nodejs-vulnerability
相关文章:

客户端与服务器的数据交互
毕设需要接粗到一些关于app和前端后端的东西,学习记录一下。 首先不要管安卓端还是苹果端,现在一般都是响应式的app,放到安卓或者苹果或者pc或者平板都是没有问题的。一般采用的是http接口通讯,或者socket连接。具体你要去查资料…

【Codeforces】908B New Year and Buggy Bot(暴力+全排列)
http://codeforces.com/contest/908/problem/B 0 1 2 3 可以对应 上下左右。(具体哪个对应哪个,试过才知道) str 的 长度 为 100,0 1 2 3 的全排列一共24种,最坏的情况可以看成遍历长为2400的字符串,不会…

swoole实现数据库连接池
2019独角兽企业重金招聘Python工程师标准>>> 原生 PHP CURD 让我们来回顾一下PHP中数据库的使用 <?php # curd.php$id 1;$dbh new PDO(); $stmt $dbh->prepare(SELECT * FROM user WHERE id:id); $stmt ->bindValue(:id, $id); $user $stmt->f…

bats-Bash自动化测试工具
本文分析了bats--Bash自动化测试工具的安装、语法、常用指令及常用函数等内容。上篇文章回顾:学习RAID 01/10/10E的区别bats 是一个符合 TAP 标准 的 Bash 版测试框架,它使用了一种极为简便的方法来验证命令行程序是否正常运行。bats 要求 Bash 的最低版…
ORB + OPENCV
一、介绍 假如有两张人物图片,我们的目标是要确认这两张图片中的人物是否是同一个人。如果人来判断,这太简单了。但是让计算机来完成这个功能就困难重重。一种可行的方法是: 分别找出两张图片中的特征点描述这些特征点的属性,比较…

【Codeforces】967C Stairs and Elevators (二分)。
http://codeforces.com/contest/967/problem/C 从一个地方到另一个地方,可以选择爬楼梯或者坐电梯 ,前提是楼梯或者电梯存在。 n 楼层数 m 每一层的房间数 s 楼梯的数量 e 电梯的数量 v 电梯的速度 第2行是s个楼梯的位置 第3行是e个电梯的位置 …

webpack 最简打包结果分析
原文链接:https://ssshooter.com/2019-02... 现在的 webpack 不再是入门噩梦,过去 webpack 最让人心塞的莫过于配置文件,而 webpack4 诞生随之而来的是无配置 webpack。 使用 webpack4,至少只需要安装 webpack 和 webpack cli。所以大家完全可…

orb-slam2(学习笔记)+相机
单目(Monocular)、双目(Stereo)、深度相机(RGB-D) 深度相机能够读取每个像素离相机的距离 ,单目相机 只使用一个摄像头进行SLAM的做法叫做单目SLAM(Monocular SLAM),结构…

如何在nuget上传自己的包+搭建自己公司的NuGet服务器(新方法)
运维相关:http://www.cnblogs.com/dunitian/p/4822808.html#iis 先注册一个nuget账号https://www.nuget.org/ 下载并安装一下NuGetPackageExplorer:https://github.com/NuGetPackageExplorer/NuGetPackageExplorer 创建一个包(vs其实也是可以…

【Codeforces】1080C Masha and two friends (棋盘染色)
http://codeforces.com/problemset/problem/1080/C 给定一个棋盘,(1,1)的位置是白色,观察可以知道,如果横纵坐标之和是偶数,那么是白色,奇数的话就是黑色。 只要算出染色以后白色方…
Java多线程001——一图读懂线程与进程
本博客 猫叔的博客,转载请申明出处前言 本系列将由浅入深,学习Java并发多线程。 一图读懂线程与进程 1、一个进程可以包含一个或多个线程。(其实你经常听到“多线程”,没有听过“多进程”嘛)2、进程存在堆和方法区 3、…

TermCriteria模板类
学习写vo过程中遇到的 类功能:模板类,作为迭代算法的终止条件。 构造函数: TermCriteria(int type,int maxCount,double epsilon); 参数说明: type 迭代终止条件类型 typeTermCriteria::MAX_ITER/TermCrite…

SQL优化快速入门
最近遇到一个专门进行SQL技术优化的项目,对很多既有的老存储过程进行调优(现在已经不再新增任何存储过程),因此系统的对SQL语句编写进行一次科学的学习变得很有必要。这儿将基于黄德承大神的Oracle SQL语句优化一书,选…
【HDU】4509 湫湫系列故事——减肥记II (区间覆盖 暴力)
http://acm.hdu.edu.cn/showproblem.php?pid4509 给出的时间段是被占用的时间,24h 1440 min,求出这些区间以外的区间长度 把00:00 - 23:59 变成0-1440 1-5都是被占用的区域,暴力很好理解 #include <iostream>…

Java并发编程71道面试题及答案
Java并发编程71道面试题及答案 1、在java中守护线程和本地线程区别? java中的线程分为两种:守护线程(Daemon)和用户线程(User)。 任何线程都可以设置为守护线程和用户线程,通过方法Thread.setDa…

USB获取图像实时处理
手写VO的准备工作,调用UAB或者本地相机获取视频图像,读取并保存视频。 #include "opencv2/core/core.hpp" #include "opencv2/highgui/highgui.hpp" #include "openc…

常见数据库 性能
2019独角兽企业重金招聘Python工程师标准>>> 转载于:https://my.oschina.net/u/582827/blog/778908

【Codeforces】1093C Mishka and the Last Exam
http://codeforces.com/problemset/problem/1093/C 已知b[i]求a[i]和a[n-i1],n是a数组中元素的个数,a数组的下标从1开始 输出b[1]的时候,直接让a[1] 0,a[n] b[0] 接下来的每一组,先让a[i] b[i],然后求…
PHP面试常考内容之Memcache和Redis(2)
你好,是我琉忆。继周一(2019.2-18)发布的“PHP面试常考内容之Memcache和Redis(1)”后,这是第二篇,感谢你的支持和阅读。本周(2019.2-18至2-22)的文章内容点为以下几点&am…

毫米波雷达、ADAS中的应用以及毫米波雷达的检测、测距、测速和角度测量
毫米波雷达的检测、测距、测速和角度测量 毫米波(Millimeter-Wave,缩写:MMW),是指长度在1~10mm的电磁波,对应的频率范围为30~300GHz.根据波的传播理论,频率越高,波长越短,分辨率越高…

【VMC实验室】在QCloud上创建您的SQL Cluster(1)
在国内公有云厂商上搭建一套SQL Cluster的难度相信做Windows的童鞋都会很清楚,并非它的搭建有多少难度,只是很多细节需要注意。腾讯云,QCloud,为什么选择QCloud来做这个实验,除了QCloud是我的东家(啊呸&…

【Codeforces】808D Array Division(前后两部分和相等)
http://codeforces.com/contest/808/problem/D 给你一个数组,问:是否可以通过移动一个数字的位置,求只能移动一次,使得这个数组前后部分的和相等,前后部分不一定等长 一个a数组储存数据,另一个b数组b[i]表…

想要确保架构目标达成?适合度函数了解一下
Paula Paul和Rosemary Wang撰写的一篇博文中介绍了适应度函数(fitness function)的基本概念、入门方法,并给出了如何验证各种架构质量的一些实例。文中提出,适应度函数驱动开发的方法可用于编写测定系统符合架构目标的测试&#x…

标定(二)----------双目相机与IMU联合标定(工具箱使用方法——Kalibr)
16个相机参数: Overview ethz-asl/kalibr is a toolbox that solves the following calibration problems: Multiple camera calibration: intrinsic and extrinsic calibration of a camera-systems with non-globally shared overlapping fields of view Cam…

【Codeforces】659B Qualifying Contest (sort)
http://codeforces.com/problemset/problem/659/B n个人,m个地区,选出每个地区分数最高的两个人 下面有n行,每一行的第一个数表示姓名,第二个数是地区的序号,第三个数是分数 It is guaranteed that all surnames of…

Protractor测试环境搭建
2019独角兽企业重金招聘Python工程师标准>>> 安装node.js.然后,在cmd下,进入E盘下的,我们自己新建的protractor文件夹下, npm install -g protractor 这样就会在本地安装好两个命令行工具:protractor和webd…

Promise和Promise的方法
(Promise和Promise的方法) Promise是ES6一个伟大的发明,他使我们从回调地狱中能够走出来。 什么是Promise 从字面上来看,Promise就是一个承诺。那么,在ES6当中,Promise通常用来控制异步操作。当一个异步操作…

镜头评价指标及测试方法(三)--------测量原理及3D相机调查
1.测量原理: 1.1、通过红外结构光(Structured Light)来测量像素距离,如Kinect1、Project Tango1、Intel Realsense等; 通过近红外激光器,将具有一定结构特征的光(比如离散光斑、条纹光、编码结构光等)投射到…

Android--Retrofit的简单使用(一)
1,如果不太了解retrofit的同学可以先去官网学习一下简单使用:http://square.github.io/retrofit/,这里我们以一个简单的Get请求的例子来练习一下 2,https://api.douban.com/v2/movie/top250?start0&count10 目标地址…

【Codeforces】920A Water The Garden(浇花)
http://codeforces.com/problemset/problem/920/A 给你花坛的数目,花坛都是连续的,某一些花坛里有水龙头,给出了这些有水龙头的位置 The garden from test 1. White colour denotes a garden bed without a tap, red colour — a garden be…