一、引言
在 Web 应用安全领域,Cookies 相关的漏洞一直是备受关注的问题。其中,“Cookies Not Marked as HttpOnly” 漏洞可能会对用户数据安全和网站的正常运行造成潜在威胁。本文将详细介绍这个漏洞,包括其原理、影响、检测方法以及修复措施。
二、漏洞概述
在对某网站进行安全扫描时,发现了 “Cookies Not Marked as HttpOnly” 漏洞。这个漏洞意味着网站设置的某些 Cookies 没有启用 HttpOnly 属性。
HttpOnly 是一个特殊的 Cookies 属性。当一个 Cookie 被设置为 HttpOnly 时,浏览器会限制客户端脚本(如 JavaScript)对该 Cookie 的访问。这一属性对于保护用户的敏感信息至关重要,特别是在涉及用户会话管理的 Cookies 中。正常情况下,服务器通过在响应头中设置 “Set - Cookie” 指令来创建和配置 Cookies,包括设置 HttpOnly 属性。
三、漏洞详情
(一)受影响的 Cookies 信息
在目标网站及其多个子页面中,发现了大量未设置 HttpOnly 标志的 Cookies。
例如:
- 在目标网站首页:
- Set - Cookie: SERVERID=ee87ab629a2331414ae03dadb21e80a1|1730944548|1730944548;Path=/
- Set - Cookie: SERVERCORSID=ee87ab629a2331414ae03dadb21e80a1|1730944548|1730944548;Path=/;SameSite=None;Secure
- 在目标网站的登录相关页面:
- Set - Cookie: custoken=a3c2a0b1 - 2fb0 - 45b8 - bee0 - d6183fae5da9; path=/
- Set - Cookie: SERVERID=ee87ab629a2331414ae03dadb21e80a1|1730944614|1730944548;Path=/
- Set - Cookie: SERVERCORSID=ee87ab629a2331414ae03dadb21e80a1|1730944614|1730944548;Path=/;SameSite=None;Secure
这些 Cookies 涉及到不同的功能和页面,但由于缺少 HttpOnly 标志,都存在被客户端脚本非法访问的风险。
(二)漏洞发现过程
通过对网站的 HTTP 请求和响应进行分析发现了此漏洞。当浏览器向服务器发送(已脱敏)请求(如 GET 请求):
GET / HTTP/1.1
Referer: [目标网站域名]
Accept: text/html,application/xhtml + xml,application/xml;q = 0.9,*/*;q = 0.8
Accept - Encoding: gzip,deflate,br
User - Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36
Host: [目标网站域名]
Connection: Keep - alive
服务器返回的响应中包含了设置 Cookies 的信息,但部分 Cookies 没有 HttpOnly 标志:
HTTP/1.1 302 Found
Date: Thu, 07 Nov 2024 01:55:48 GMT
Content - Type: text/html; charset=utf - 8
Content - Length: 132
Connection: keep - alive
Set - Cookie: acw_tc=1a96c8163df254695e645157f6d11ade0160f2e773eb4711e809356575daf82b;path=/;HttpOnly;Max - Age=1800
Cache - Control: private
Location: [目标网站内具体页面路径]
Set - Cookie: ASP.NET_SessionId=a3z05k4fd1x5egn3yl5efgyg; path=/; HttpOnly; SameSite=Lax
X - AspNet - Version: 4.0.30319
X - Powered - By: ASP.NET
Set - Cookie: SERVERID=ee87ab629a2331414ae03dadb21e80a1|1730944548|1730944548;Path=/
Set - Cookie: SERVERCORSID=ee87ab629a2331414ae03dadb21e80a1|1730944548|1730944548;Path=/;SameSite=None;Secure
<html><head><title>Object moved</title></head><body>
<h2>Object moved to <a href="[目标网站内具体页面路径]">here</a>.</h2>
</body></html>
四、漏洞影响
(一)安全风险
- 易受跨站脚本攻击(XSS)
由于 Cookies 可被客户端脚本访问,如果网站存在 XSS 漏洞,攻击者就可以利用恶意脚本获取这些 Cookies。例如,攻击者可以获取用户的会话 Cookies,然后冒用用户身份进行非法操作,如访问用户的个人信息、执行未授权的交易等。 - 用户数据泄露
Cookies 中可能包含用户的敏感信息,如登录凭证、个性化设置等。没有 HttpOnly 保护,这些信息可能被窃取,导致用户隐私泄露。
(二)对网站声誉的影响
一旦发生因该漏洞导致的安全事件,用户可能会对网站的安全性产生质疑,从而降低对网站的信任度。这可能会导致用户流失,对网站的商业运营和声誉造成负面影响。
五、漏洞评分与级别
综合考虑该漏洞的可利用性、影响范围和修复难度,这个 “Cookies Not Marked as HttpOnly” 漏洞可以被评为中高风险级别。从 CVSS 评分角度来看,大概在 3 - 7 分(满分 10 分)。其可利用性较高,因为在存在 XSS 漏洞的情况下很容易被利用;影响范围广,涉及网站的多个关键页面;但修复难度相对较低,只需为相关 Cookies 设置 HttpOnly 标志即可。
六、修复建议
为了修复这个漏洞,对于所有涉及用户敏感信息或用于会话管理的 Cookies,都应该设置 HttpOnly 标志。以下是在不同技术环境中的设置方法示例:
(一)Java(Servlet)
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletResponse;
// 在Servlet的doGet或doPost方法中
public void doGet(HttpServletRequest request, HttpServletResponse response) {Cookie cookie = new Cookie("cookieName", "cookieValue");// 设置HttpOnly标志为truecookie.setHttpOnly(true);// 设置其他属性,如路径、有效期等cookie.setPath("/");// 将Cookie添加到响应中response.addCookie(cookie);
}
(二)Python(Flask)
from flask import Flask, make_response
app = Flask(__name__)
@app.route('/')
def set_cookie():resp = make_response("Cookie set")resp.set_cookie('cookieName', 'cookieValue', httponly=True)return resp
(三)JavaScript(Node.js + Express)
const express = require('express');
const app = express();
app.get('/', (req, res) => {res.cookie('cookieName', 'cookieValue', {httpOnly: true});res.send('Cookie set');
});
app.listen(3000, () => {console.log('Server running on port 3000');
});
(四)ASP.NET(C#)
using System.Web;
// 在一个ASPX页面的代码后置文件(.cs)或者一个Web API控制器方法中
public void SetCookie()
{HttpCookie cookie = new HttpCookie("cookieName", "cookieValue");cookie.HttpOnly = true;// 设置其他属性,如路径、有效期等cookie.Path = "/";// 将Cookie添加到响应中HttpContext.Current.Response.Cookies.Add(cookie);
}
七、总结
“Cookies Not Marked as HttpOnly” 漏洞是一个需要重视的 Web 安全问题。通过了解其原理、影响和修复方法,开发人员可以采取有效的措施来保护用户数据安全和目标网站的正常运行,减少因 Cookies 安全问题带来的潜在风险。希望本文能为大家在处理这类漏洞时提供有益的参考。