当前位置: 首页 > 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…...

Ubuntu系统下交叉编译openssl

一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机&#xff1a;Ubuntu 20.04.6 LTSHost&#xff1a;ARM32位交叉编译器&#xff1a;arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...

智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql

智慧工地管理云平台系统&#xff0c;智慧工地全套源码&#xff0c;java版智慧工地源码&#xff0c;支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求&#xff0c;提供“平台网络终端”的整体解决方案&#xff0c;提供劳务管理、视频管理、智能监测、绿色施工、安全管…...

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)

引言&#xff1a;为什么 Eureka 依然是存量系统的核心&#xff1f; 尽管 Nacos 等新注册中心崛起&#xff0c;但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制&#xff0c;是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...

C++.OpenGL (10/64)基础光照(Basic Lighting)

基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...

蓝桥杯 冶炼金属

原题目链接 &#x1f527; 冶炼金属转换率推测题解 &#x1f4dc; 原题描述 小蓝有一个神奇的炉子用于将普通金属 O O O 冶炼成为一种特殊金属 X X X。这个炉子有一个属性叫转换率 V V V&#xff0c;是一个正整数&#xff0c;表示每 V V V 个普通金属 O O O 可以冶炼出 …...

推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材)

推荐 github 项目:GeminiImageApp(图片生成方向&#xff0c;可以做一定的素材) 这个项目能干嘛? 使用 gemini 2.0 的 api 和 google 其他的 api 来做衍生处理 简化和优化了文生图和图生图的行为(我的最主要) 并且有一些目标检测和切割(我用不到) 视频和 imagefx 因为没 a…...

Python+ZeroMQ实战:智能车辆状态监控与模拟模式自动切换

目录 关键点 技术实现1 技术实现2 摘要&#xff1a; 本文将介绍如何利用Python和ZeroMQ消息队列构建一个智能车辆状态监控系统。系统能够根据时间策略自动切换驾驶模式&#xff08;自动驾驶、人工驾驶、远程驾驶、主动安全&#xff09;&#xff0c;并通过实时消息推送更新车…...

redis和redission的区别

Redis 和 Redisson 是两个密切相关但又本质不同的技术&#xff0c;它们扮演着完全不同的角色&#xff1a; Redis: 内存数据库/数据结构存储 本质&#xff1a; 它是一个开源的、高性能的、基于内存的 键值存储数据库。它也可以将数据持久化到磁盘。 核心功能&#xff1a; 提供丰…...

小木的算法日记-多叉树的递归/层序遍历

&#x1f332; 从二叉树到森林&#xff1a;一文彻底搞懂多叉树遍历的艺术 &#x1f680; 引言 你好&#xff0c;未来的算法大神&#xff01; 在数据结构的世界里&#xff0c;“树”无疑是最核心、最迷人的概念之一。我们中的大多数人都是从 二叉树 开始入门的&#xff0c;它…...

聚六亚甲基单胍盐酸盐市场深度解析:现状、挑战与机遇

根据 QYResearch 发布的市场报告显示&#xff0c;全球市场规模预计在 2031 年达到 9848 万美元&#xff0c;2025 - 2031 年期间年复合增长率&#xff08;CAGR&#xff09;为 3.7%。在竞争格局上&#xff0c;市场集中度较高&#xff0c;2024 年全球前十强厂商占据约 74.0% 的市场…...