EfeSidal/CipherNone
GitHub: EfeSidal/CipherNone
这是一个基于Node.js的应用安全实验室,演示了JWT「alg: none」签名绕过漏洞及其利用与修复方案。
Stars: 0 | Forks: 0
# 🛡️ CipherNone: JWT "alg: none" 漏洞与加固实验室



[🇹🇷 Türkçe](#turkce) | [🇬🇧 English](#english)
### 👤 项目信息
| | |
|---|---|
| **学生** | Efe Sidal |
| **指导教师** | Keyvan Arasteh |
| **大学** | İstinye Üniversitesi |
| **专业** | 信息技术安全 |
| **课程** | 安全 Web 软件开发 |
## 🇹🇷 Türkçe
**CipherNone** 是一个 AppSec(应用安全)实验室,通过实战演示现代 Web 架构(REST API)中常见的一个严重身份验证漏洞(JWT 签名绕过)。
在这个项目中,攻击者将 JWT header 中的算法修改为 `alg: none` 并将签名部分留空,从而实现身份验证绕过。本项目以证据展示了该漏洞的利用过程以及如何在架构层面进行修补(加固)。
### 🚀 项目内容
* **`vulnerable_api.js`(受害者):** 一个故意不检查 "alg: none" 并接受无签名 token 的充满漏洞的 Node.js API(端口:3000)。
* **`exploit.js`(武器):** 一个在不使用任何库的情况下,完全从零开始生成伪造 Base64Url JWT,并以 "Admin" 权限潜入受害者 API 的攻击脚本。
* **`secure_api.js`(护盾):** 基于 Zero-Trust 原则编写的、只接受 `HS256` 算法并立即拒绝伪造 token 的已加固 API(端口:3001)。
### 🛡️ 高级安全功能
* **单元测试**:集成了使用 Jest 和 Supertest 的自动化安全验证测试。
* **Rate Limiting**:通过 `express-rate-limit` 增加了针对 Brute-Force 攻击的防护层。
* **HTTPS/TLS**:所有流量均通过 Self-Signed SSL 证书进行端到端加密。
## 🎬 演示
您可以通过以下视频观看项目的运行情况、利用过程以及安全 API 如何阻止攻击:
[](https://youtu.be/Vk-bpNAXWIc)
### 📊 测试范围
项目中编写了 4 个使用 Jest + Supertest 的自动化测试,以验证 JWT 安全机制。
- ✅ 使用有效的 HS256 admin token 访问 /admin
- ✅ 检测并阻止 alg: none 攻击
- ✅ 阻止 Algorithm Confusion(RS256 alg + HS256 签名)攻击
- ✅ 拒绝 User 角色的管理员访问权限




### 🎬 演示(交互式画廊)
您可以通过下方的**交互式画廊**逐步探索 CipherNone 实验室的所有功能、对存在漏洞的 API 发起的 `alg:none` 攻击以及 RS256 加固防御。
[](./demo/WALKTHROUGH.md)
## 🚀 开始上手
### 📦 安装
```
git clone https://github.com/EfeSidal/GuvenliWebYazilimiGelistirme-CipherNone-.git
cd GuvenliWebYazilimiGelistirme-CipherNone-
npm install
```
### 🛠 使用 (PoC)
**1. 启动存在漏洞的服务器:**
```
node src/vulnerable_api.js
```
**2. 触发武器(攻击阶段):**
```
node src/exploit.js
```
**3. 测试安全服务器(防御阶段):**
```
node src/secure_api.js
```
### 👤 项目信息
| | |
|---|---|
| **学生** | Efe Sidal |
| **指导教师** | Keyvan Arasteh |
| **大学** | Istinye University |
| **专业** | Information Security Technology |
| **课程** | Secure Web Software Development |
## 🇬🇧 English
**CipherNone** 是一个 AppSec(应用安全)实验室,通过实战演示现代 Web 架构(REST API)中常见的一个严重身份验证漏洞:JWT 签名绕过。
### 🚀 项目内容
* **`vulnerable_api.js`(受害者):** 一个故意不检查 "alg: none" 并接受无签名 token 的充满漏洞的 Node.js API。
* **`exploit.js`(武器):** 一个完全从零开始生成伪造 Base64Url JWT 并绕过受害者 API 的攻击脚本。
* **`secure_api.js`(护盾):** 基于 Zero-Trust 原则构建的、严格执行 `RS256` 算法的已加固 API。
## 🎬 演示
观看下方视频,了解项目的运行方式、利用过程以及安全 API 如何阻止攻击:
[](https://youtu.be/Vk-bpNAXWIc)
### 📊 测试覆盖范围
- ✅ 使用有效的 HS256 admin token 访问 /admin
- ✅ 检测并阻止 alg: none 攻击
- ✅ 阻止 Algorithm Confusion 攻击
- ✅ 拒绝 User 角色的管理员访问权限

### 🎬 演示(交互式画廊)
通过我们的**逐帧交互式画廊**,探索 CipherNone 的所有功能,包括对存在漏洞的 API 发起的 `alg:none` 攻击利用以及 RS256 加固防御。
[](./demo/WALKTHROUGH.md)
## 🚀 开始上手
### 📦 安装
```
npm install
```
### 🛠 使用 (PoC)
**1. 启动存在漏洞的服务器:** `node src/vulnerable_api.js`
**2. 触发武器:** `node src/exploit.js`
**3. 测试安全服务器:** `node src/secure_api.js`
## 📜 治理与链接
- [📜 路线图](ROADMAP.md) - 项目开发计划和未来目标。
- [🤝 贡献指南](CONTRIBUTING.md) - 贡献的规则和流程。
- [🔒 安全策略](SECURITY.md) - 安全策略和漏洞披露。
- [🛠 故障排除](TROUBLESHOOTING.md) - 常见问题与解决方案。
*(将 `exploit.js` 中的端口更改为 3001 并再次攻击。结果:403 Forbidden - 攻击已被阻止!)*
标签:GNU通用公共许可证, JWT, Node.js, StruQ, Web安全, 安全实验室, 应用安全, 漏洞修复, 漏洞利用, 网络安全培训, 自定义脚本, 蓝队分析