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

安全研究 | 不同编程语言中 IP 地址分类的不一致性

作为一名安全研究人员,我分析了不同编程语言中 IP 地址分类 的行为。最近,我注意到一些有趣的不一致性,特别是在循环地址和私有 IP 地址的处理上。在这篇文章中,我将分享我对此问题的观察和见解。

设置

我检查了多种编程语言(如 Go、Java、Node.js、PHP、Python 和 Ruby)中多个 IP 地址(包括本地和私有范围)的输出。以下是我的分析中的关键发现:

循环 IP 地址 (127.0.0.1)

Go:报告 Is Privatefalse, Is Loopbacktrue

Java:标记为 Is Privatefalse

Node.js:报告 Is PrivatetrueIs Loopbacktrue

PHP:报告 Is Privatetrue

Python:报告 Is PrivateTrueIs LoopbackTrue

Ruby:标记为 Is Privatefalse

不一致性:对于 127.0.0.1 的分类在语言间有显著差异。一些语言(Go、Node.js、PHP)将其识别为 私有,而其他语言(Java、Ruby)则 不这样认为。一般而言,127.0.0.1 应被视为循环地址,并预计被分类为 私有

IPv6 循环地址 (::1)

Go:报告 Is Privatefalse, Is Loopbacktrue

Java:标记为 Is Privatefalse

Node.js:报告 Is Privatetrue

PHP:报告 Is Privatetrue

Python:报告 Is PrivateTrueIs LoopbackTrue

Ruby:标记为 Is Privatefalse

不一致性:与 127.0.0.1 类似,IPv6 循环地址 ::1 在各语言中的分类也有所不同。尽管一些语言(Node.js、PHP)将其标记为 私有,其他语言(Java、Ruby)则 不这样认为。预期 ::1 应被视为循环地址,并标记为 私有

私有 IP 地址

Go:正确识别 192.168.1.1 为 私有

Java:准确识别 192.168.1.110.0.0.1 和 172.16.0.1 为 私有

Node.js:在 127.0.0.1 和 169.254.169.254 上显示不一致。

PHP:正确识别多个地址为 私有,包括 169.254.169.254

Python:准确处理 私有 IP,但将 169.254.169.254 标记为私有,可能会引起混淆。

Ruby:错误地将 169.254.169.254 识别为非 私有

169.254.169.254 的案例

IP 地址 169.254.169.254 属于链路本地范围(169.254.0.0/16),专门用于自动私有 IP 地址分配(APIPA),通常出现在云环境中,如 AWS 和 Google Cloud。该地址提供关键的元数据,使运行在虚拟机上的服务能够访问实例信息,包括安全凭证、实例 ID 以及其他环境数据。

图片

不同编程语言输出的不一致性

让我们看看这个 IP 在不同编程语言中的处理方式:

Go:标记 169.254.169.254 为 IsLinkLocalUnicast: true,但不为 私有 (IsPrivate: false)。

Java:将该 IP 分类为 Is Private: false,这与链路本地地址的性质一致,链路本地地址不严格属于私有地址,但在本地子网内使用受到限制。

Node.js:同时标记为 IsPrivate: true 和 IsLoopback: false。这是一个不一致的分类,因为链路本地地址不应被视为私有。

PHP:将其标记为 私有,这与链路本地地址的预期行为相矛盾。

Python:正确识别为 IsLinkLocal: True,同时标记为 私有

Ruby错误地识别为  私有

这为何重要

链路本地地址如 169.254.169.254 在云环境中扮演着重要角色,特别是用于实例元数据的检索。错误地分类这个 IP 地址可能导致严重的安全问题,尤其是在容易受到 服务器端请求伪造(SSRF) 漏洞攻击的环境中。

例如,如果应用程序错误地将 169.254.169.254 标记为私有,并允许对其的无限制访问,那么攻击者利用 SSRF 漏洞可能会提取敏感的实例元数据,包括云服务的临时凭证。这可能使他们提升权限、访问云资源并发起进一步攻击。

在 AWS 中,访问 http://169.254.169.254/latest/meta-data/ 会提供关于 EC2 实例的重要元数据,包括 IAM 角色。在 Google Cloud 中,类似的元数据也可以通过该 IP 获取。错误的分类可能会导致对该地址的请求暴露敏感信息给未授权用户。

结论

观察到的编程语言间的不一致性突显了 IP 地址分类缺乏标准化定义和行为。这种差异在安全上下文中尤为关键,因为不同的处理方式可能导致意想不到的行为,尤其是在涉及服务器端请求的场景中。

建议

标准化:建立明确的指南,以便在不同编程环境中统一 IP 地址分类,从而最小化这些不一致性。

测试和验证:对 IP 分类函数实施全面的测试,以确保在各种环境中表现出一致且安全的行为。

意识提升:开发者必须意识到这些差异,并相应设计应用程序,特别是在处理可能涉及本地或私有网络地址的请求时。

Semgrep Rule for Go

为了确保 Go 语言中对 IP 地址分类的正确处理,可以使用以下 Semgrep 规则:

rules: - id: go-check-isprivate languages: [go] patterns: - pattern: $IP.IsPrivate() - pattern-not: $IP.IsLinkLocalUnicast() message: "Ensure IP address handling methods include MustParseAddr or ParseIP, and validate the IP using IsPrivate, IsLoopback, or IsLinkLocalUnicast after parsing." severity: WARNING

该规则检查 IsPrivate() 的使用,同时确保 IsLinkLocalUnicast() 不存在,提示开发者在解析后验证其 IP 地址处理方法。

图片

理解这些细微差别对于增强安全性和确保应用程序在不同编程语言和环境中的稳定性至关重要。通过解决这些不一致性,我们可以帮助减少可能危及基于云的基础设施的潜在漏洞。

您可以在我的GitHub仓库中找到完整的代码和分析:https://github.com/aydinnyunus/isItPrivate。该仓库旨在帮助理解不同编程语言中的IP地址分类,并强调这些分类的潜在安全影响,特别是与云环境中的SSRF漏洞相关的影响。

向Google及其他公司报告问题

在我的研究过程中,我遇到了不同编程语言对169.254.169.254分类不一致的问题。为了澄清这一点,我向Google报告了该问题。3月3日,他们回复道:

“IP.IsPrivate检查一个IP是否属于IANA定义的私有地址块,依据RFC 1918和RFC 4193。169.254.169.254不属于这两个范围。169.254/16是一个链接本地前缀,正如IP.IsLinkLocalMulticast和IP.IsLinkLocalUnicast所正确报告的那样。这似乎是按照预期工作的。”

这种不一致性源于不同语言和库对链接本地和私有IP的不同解释。

 

无 偿 获 取 网 安 资 料:

 申明:本账号所分享内容仅用于网络安全技术讨论,切勿用于违法途径,所有渗透都需获取授权,违者后果自行承担,与本号及作者无关

相关文章:

安全研究 | 不同编程语言中 IP 地址分类的不一致性

作为一名安全研究人员,我分析了不同编程语言中 IP 地址分类 的行为。最近,我注意到一些有趣的不一致性,特别是在循环地址和私有 IP 地址的处理上。在这篇文章中,我将分享我对此问题的观察和见解。 设置 我检查了多种编程语言&am…...

小小的表盘还能玩出这么多花样?华为手表这次细节真的拉满

没想到小小的表盘还能玩出这么多花样?华为这次细节真的拉满!还有没有你不知道的神奇玩法? 情绪萌宠,心情状态抬腕可见 好心情就像生活馈赠的糖果,好的心情让我们遇到困难也不惧打击!HUAWEI WATCH GT 5情绪…...

trueNas 24.10 docker配置文件daemon.json无法修改(重启被覆盖)解决方案

前言 最近听说truenas的24.10版本开放docker容器解决方案放弃了原来难用的k3s,感觉非常巴适,就研究了一下,首先遇到无法迁移老系统应用问题比较好解决,使用sudo登录ssh临时修改daemon.json重启docker后进行docker start 容器即可…...

数字孪生,概念、应用与未来展望

随着科技的飞速发展,数字化已经成为各行各业的发展趋势,在这个过程中,数字孪生作为一种新兴的技术,逐渐引起了人们的关注,本文将对数字孪生的概念、应用以及未来展望进行详细介绍。 数字孪生的概念: 数字孪…...

Chromium HTML Input 类型Text 对应c++

一、文本域&#xff08;Text Fields&#xff09; 文本域通过 <input type"text"> 标签来设定&#xff0c;当用户要在表单中键入字母、数字等内容时&#xff0c;就会用到文本域。 <!DOCTYPE html> <html> <head> <meta charset"ut…...

SpringMvc参数传递

首先对于post请求汉字乱码需要进行过滤器配置 普通参数传递 直接传递 客户端传递的属性名与我的bean中的函数参数名相同 映射传递RequestParam("XXX") 在我们方法参数中定义一个与客户端属性名一致 并绑定参数 POJO实体类传递 嵌套POJO传递 数组likes参数传递…...

西安国际数字影像产业园:数字化建设赋能产业升级与拓展

西安国际数字影像产业园的数字化建设&#xff0c;在当前经济与科技迅猛发展的大背景下&#xff0c;已然成为提升园区管理效率、服务水平以及运营效果的关键趋势。随着信息技术日新月异的进步&#xff0c;数字化更是成为这座产业园转型升级的核心关键词。如今&#xff0c;西安国…...

linux线程池

线程池: * 一种线程使用模式。线程过多会带来调度开销&#xff0c;进而影响缓存局部性和整体性能。而线程池维护着多个线程&#xff0c;等待着 监督管理者分配可并发执行的任务。这避免了在处理短时间任务时创建与销毁线程的代价。线程池不仅能够保证内核的充分利 用&#xff0…...

PyTorch图像分类实战——基于ResNet18的RAF-DB情感识别(附完整代码和结果图)

PyTorch图像分类实战——基于ResNet18的RAF-DB情感识别&#xff08;附完整代码和结果图&#xff09; 关于作者 作者&#xff1a;小白熊 作者简介&#xff1a;精通python、matlab、c#语言&#xff0c;擅长机器学习&#xff0c;深度学习&#xff0c;机器视觉&#xff0c;目标检测…...

【OccNeRF: Advancing 3D Occupancy Prediction in LiDAR-Free Environments】阅读笔记

【OccNeRF: Advancing 3D Occupancy Prediction in LiDAR-Free Environments】阅读笔记 1. 论文概述Abstract1. Introduction2. Related work2.1 3D Occupancy Prediction2.2 Neural Radiance Fields2.3 Self-supervised Depth Estimation 3. Method3.1 Parameterized Occupanc…...

DDRPHY数字IC后端设计实现系列专题之后端设计导入,IO Ring设计

本章详细分析和论述了 LPDDR3 物理层接口模块的布图和布局规划的设计和实 现过程&#xff0c;包括设计环境的建立&#xff0c;布图规划包括模块尺寸的确定&#xff0c;IO 单元、宏单元以及 特殊单元的摆放。由于布图规划中的电源规划环节较为重要&#xff0c; 影响芯片的布线资…...

EDA --软件开发之路

之前一直在一家做数据处理的公司&#xff0c;从事c开发&#xff0c;公司业务稳定&#xff0c;项目有忙有闲&#xff0c;时而看下c&#xff0c;数据库&#xff0c;linux相关书籍&#xff0c;后面跳槽到了家eda公司&#xff0c;开始了一段eda开发之路。 eda 是 electric design …...

51c~目标检测~合集2

我自己的原文哦~ https://blog.51cto.com/whaosoft/12377509 一、总结 这里概述了基于深度学习的目标检测器的最新发展。同时&#xff0c;还提供了目标检测任务的基准数据集和评估指标的简要概述&#xff0c;以及在识别任务中使用的一些高性能基础架构&#xff0c;其还涵盖了…...

计算机低能儿从0刷leetcode | 33.搜索旋转排列数组

题目&#xff1a;33. 搜索旋转排序数组 思路&#xff1a;看到时间复杂度要求是O(log N)很容易想到二分查找&#xff0c;普通的二分查找我们已经掌握&#xff0c;本题中的数组可以看作由两个分别升序的数组拼成&#xff0c;在完全升序的部分中进行二分查找是容易的&#xff0c;…...

SpringBoot+VUE2完成WebSocket聊天(数据入库)

下载依赖 <!-- websocket --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId></dependency><!-- MybatisPlus --><dependency><groupId>com.ba…...

理解 CSS 中的绝对定位与 Flex 布局混用

理解 CSS 中的绝对定位与 Flex 布局混用 在现代网页设计中&#xff0c;CSS 布局技术如 flex 和绝对定位被广泛使用。然而&#xff0c;这两者结合使用时&#xff0c;可能会导致一些意想不到的布局问题。本文将探讨如何正确使用绝对定位元素&#xff0c;避免它们受到 flex 布局的…...

Redis 事务 问题

前言 相关系列 《Redis & 目录》《Redis & 事务 & 源码》《Redis & 事务 & 总结》《Redis & 事务 & 问题》 参考文献 《Redis事务详解》 Redis事务是什么&#xff1f; 标准的事务是指执行时具备原子性/一致性/隔离性/持久性的一系列操作。…...

Cpp学习手册-进阶学习

C标准库和C20新特性 C标准库概览&#xff1a; 核心库组件介绍&#xff1a; 容器&#xff1a; C 标准库提供了多种容器&#xff0c;它们各有特点&#xff0c;适用于不同的应用场景。 std::vector&#xff1a; vector&#xff1a;动态数组&#xff0c;支持快速随机访问。 #in…...

代码随想录-字符串-反转字符串中的单词

题目 题解 法一:纯粹为了做出本题&#xff0c;暴力解 没有技巧全是感情 class Solution {public String reverseWords(String s) {//首先去除首尾空格s s.trim();String[] strs s.split("\\s");StringBuilder sb new StringBuilder();//定义一个公共的字符反转…...

勒索软件通过易受攻击的 Cyber​​Panel 实例攻击网络托管服务器

一个威胁行为者&#xff08;或可能多个&#xff09;使用 PSAUX 和其他勒索软件攻击了大约 22,000 个易受攻击的 Cyber​​Panel 实例以及运行该实例的服务器上的加密文件。 PSAUX 赎金记录&#xff08;来源&#xff1a;LeakIX&#xff09; Cyber​​Panel 漏洞 Cyber​​Pane…...

如何用Python处理杭州交通数据集?从roadnet.json到flow.json的完整解析指南

杭州交通数据实战&#xff1a;用Python解析roadnet.json与flow.json的进阶技巧 第一次接触杭州交通数据集时&#xff0c;我被roadnet.json里密密麻麻的交叉点坐标和flow.json中流动的车辆轨迹震撼到了——这哪是数据文件&#xff0c;分明是一座数字孪生城市的血管与血液。作为算…...

终极foobox-cn配置指南:如何打造专业级音乐播放体验

终极foobox-cn配置指南&#xff1a;如何打造专业级音乐播放体验 【免费下载链接】foobox-cn DUI 配置 for foobar2000 项目地址: https://gitcode.com/GitHub_Trending/fo/foobox-cn foobox-cn作为foobar2000的DUI&#xff08;自定义用户界面&#xff09;配置方案&#…...

ArcGIS缓冲区与叠加分析在环境评估中的实战应用

1. ArcGIS缓冲区与叠加分析基础概念 当你第一次听说"缓冲区"和"叠加分析"这两个词时&#xff0c;可能会觉得这是很高深的技术术语。其实它们的原理非常简单&#xff0c;就像我们日常生活中常见的场景。想象一下&#xff0c;如果你在小区里扔了一块石头&…...

如何实现高效无水印视频批量下载?TikTokDownload工具全攻略

如何实现高效无水印视频批量下载&#xff1f;TikTokDownload工具全攻略 【免费下载链接】TikTokDownload 抖音去水印批量下载用户主页作品、喜欢、收藏、图文、音频 项目地址: https://gitcode.com/gh_mirrors/ti/TikTokDownload 在数字内容创作与素材收集的过程中&…...

ms-swift框架实战:从零构建高效Embedding微调流水线

1. 为什么需要定制Embedding模型&#xff1f; 在智能客服问答匹配这类场景中&#xff0c;预训练的通用Embedding模型往往表现不佳。我去年做过一个电商客服项目&#xff0c;直接用开源Embedding模型处理"怎么退货"这类问题时&#xff0c;会把"如何退款"、&…...

GLM-OCR .NET平台集成指南:C#调用与桌面应用开发

GLM-OCR .NET平台集成指南&#xff1a;C#调用与桌面应用开发 如果你是一名.NET开发者&#xff0c;正在琢磨怎么给你的桌面应用或者Web项目加上一个“眼睛”&#xff0c;让它能看懂图片里的文字&#xff0c;那这篇文章就是为你准备的。OCR&#xff08;光学字符识别&#xff09;…...

工作中常用linux命令汇总

①启动jar包&#xff1a;nohup java -jar ruoyi-admin.jar > app.log 2>&1 &②指定端口启动jar包&#xff1a;nohup java -jar -Dserver.port8081 ruoyi-admin.jar > app.log 2>&1 &③根据jar包判断启动的进程&#xff1a;jps -l | grep ruoyi-adm…...

飞机表面缺陷识别分割数据集labelme格式4612张5类别

注意数据集中有超过一半图片是增强图片数据集格式&#xff1a;labelme格式(不包含mask文件&#xff0c;仅仅包含jpg图片和对应的json文件)图片数量(jpg文件个数)&#xff1a;4612标注数量(json文件个数)&#xff1a;4612标注类别数&#xff1a;5标注类别名称:["Crack"…...

5分钟掌握OptiScaler:让所有显卡都能享受DLSS级画质的免费神器

5分钟掌握OptiScaler&#xff1a;让所有显卡都能享受DLSS级画质的免费神器 【免费下载链接】OptiScaler DLSS replacement for AMD/Intel/Nvidia cards with multiple upscalers (XeSS/FSR2/DLSS) 项目地址: https://gitcode.com/GitHub_Trending/op/OptiScaler 还在为显…...

突破大文件传输瓶颈:aliyunpan快传链接技术全解析

突破大文件传输瓶颈&#xff1a;aliyunpan快传链接技术全解析 【免费下载链接】aliyunpan 阿里云盘命令行客户端&#xff0c;支持JavaScript插件&#xff0c;支持同步备份功能。 项目地址: https://gitcode.com/GitHub_Trending/ali/aliyunpan 大文件传输的现实痛点&…...