FlawOpen

flawopen.com/संदर्भ/PR बॉट सुरक्षा

AI PR रिव्यू बॉट: Prompt Injection और SSRF से सुरक्षा

AI PR रिव्यू बॉट: Prompt Injection से SSRF रोकें

अविश्वसनीय pull request पाठ AI टूल को कैसे प्रभावित कर सकता है और बॉट की अनुमतियाँ व नेटवर्क पहुँच कैसे सीमित करें।

सुरक्षा जोखिम CWE-1427 / CWE-918 AI और डेवलपर वर्कफ़्लो सुरक्षा

सरल उदाहरण: निजी नेटवर्क का पास रखने वाला समीक्षक

Pull Request समीक्षा टीम को दिए गए पैकेट जैसी है: सामग्री उपयोगी हो सकती है, पर वह कंपनी की नीति नहीं बन जाती। यदि AI समीक्षक निजी नेटवर्क से कोई भी URL प्राप्त कर सकता है, तो भ्रामक निर्देश उसके लक्ष्य को प्रभावित कर सकता है। जोखिम टूल और नेटवर्क अनुमतियों पर निर्भर है; शत्रुतापूर्ण पाठ पढ़ने भर से नेटवर्क पहुँच नहीं मिलती।

मुख्य अवधारणाएँ और शब्द

अविश्वसनीय इनपुट:
योगदानकर्ताओं के Pull Request शीर्षक, विवरण, टिप्पणियाँ, diff और लिंक की सामग्री।
अप्रत्यक्ष Prompt Injection:
मॉडल संदर्भ में शामिल होने के कारण अविश्वसनीय पाठ एजेंट को प्रभावित करता है।
SSRF सीमा:
सर्वर-साइड फ़ेच टूल ऐसे गंतव्य तक पहुँच सकता है जहाँ योगदानकर्ता सीधे नहीं पहुँच सकता।
प्रभाव की शर्तें:
साथ में सुलभ आंतरिक सेवा, उपलब्ध क्रेडेंशियल और कमजोर अनुमति या egress नियंत्रण भी आवश्यक हैं।

तंत्र और मूल कारण

रिव्यू बॉट योगदानकर्ता-नियंत्रित पाठ और भरोसेमंद समीक्षा निर्देश मॉडल को दे सकता है। मॉडल किसी भी स्रोत के आधार पर टूल कॉल सुझा सकता है। Prompt और delimiters नेटवर्क पहुँच की अनुमति नहीं देते। SSRF तभी संभव है जब एप्लिकेशन मॉडल द्वारा चुने गंतव्य को स्वीकार करे और नेटवर्क-सक्षम टूल वहाँ पहुँच सके। क्लाउड मेटाडेटा या क्रेडेंशियल तक पहुँच अतिरिक्त सशर्त प्रभाव है, Prompt Injection का अपने-आप होने वाला परिणाम नहीं।

सशर्त हमला पथ

1

योगदानकर्ता PR सामग्री नियंत्रित करता है

बाहरी योगदानकर्ता शीर्षक, विवरण, टिप्पणियाँ, बदला हुआ पाठ और लिंक की सामग्री प्रभावित कर सकता है।

2

एजेंट सामग्री पढ़ता है

सेवा कुछ अविश्वसनीय फ़ील्ड मॉडल संदर्भ में रखती है; इससे जवाब या टूल सुझाव प्रभावित हो सकते हैं।

3

टूल पहुँच तय करता है

यदि एजेंट कोई भी URL प्राप्त कर सके, तो runner नेटवर्क द्वारा अनुमत गंतव्य से संपर्क कर सकता है। ऐसा टूल न हो तो यह SSRF पथ नहीं है।

4

प्रभाव तैनाती पर निर्भर है

आंतरिक डेटा या क्रेडेंशियल तभी उजागर होंगे जब सुलभ सेवाएँ, मेटाडेटा सेटिंग, पहचान-अधिकार और आउटपुट नियंत्रण इसकी अनुमति दें।

कोड: बिना जाँच dispatch बनाम अधिकृत read-only सुविधा

निष्क्रिय mock उदाहरण
# INERT DEMO: model-selected URL reaches a mock tool without policy checks
from dataclasses import dataclass

@dataclass
class ToolCall:
    name: str
    arguments: dict[str, str]

class MockFetch:
    def __init__(self):
        self.calls = []

    def __call__(self, url: str) -> str:
        self.calls.append(url)
        return "fixture response"

def dispatch_unchecked(call: ToolCall, tools: dict):
    # The mock records a string; it makes no network request.
    return tools[call.name](**call.arguments)

mock_fetch = MockFetch()
call = ToolCall("fetch_url", {"url": "https://docs.example.invalid/"})
assert dispatch_unchecked(call, {"fetch_url": mock_fetch}) == "fixture response"
assert mock_fetch.calls == ["https://docs.example.invalid/"]
नीति-नियंत्रित read-only टूल
# SAFE DEMO: the agent receives only a read-only PR capability
from dataclasses import dataclass

@dataclass(frozen=True)
class ReviewContext:
    repository: str
    pull_request: int

@dataclass
class ToolCall:
    name: str
    arguments: dict[str, object]

READ_ONLY_TOOLS = {"read_pr_diff"}

def dispatch_review_call(call: ToolCall, context: ReviewContext, policy, tools):
    if call.name not in READ_ONLY_TOOLS:
        raise PermissionError("Tool is not available to this review")
    expected = {"repository": context.repository,
                "pull_request": context.pull_request}
    if call.arguments != expected:
        raise ValueError("Arguments must match the authorized review")
    if not policy.can_read_pr(context.repository, context.pull_request):
        raise PermissionError("Review principal cannot read this pull request")
    # The injected read_pr_diff function is trusted app code, not model output.
    return tools["read_pr_diff"](**expected)

इंजीनियरिंग सख्तीकरण चेकलिस्ट

दर्ज संबंधित भेद्यता — CVE-2023-32786

GitHub-समीक्षित CVE-2023-32786 सलाह के अनुसार LangChain 0.0.329 से पुराने संस्करणों में Prompt Injection सेवा से मनमाना URL मँगवा सकती थी (SSRF) और आगे के कार्यों को प्रभावित कर सकती थी। सलाह में 0.0.329 सुधारा संस्करण है। यह URL-fetch की दर्ज शृंखला है, PR-बॉट घटना या cloud metadata चोरी का प्रमाण नहीं।

मुख्य मार्गदर्शन और रिकॉर्ड

सुरक्षा निर्देशिका देखें → अन्य संदर्भ गाइड देखें →
यह भी देखें सर्वर-साइड रिक्वेस्ट फ़ॉर्जरी (SSRF, CWE-918): यह कैसे काम करता है और हर भाषा में इससे कैसे बचें — flawopen.com Node.js fetch() SSRF: URL सुरक्षित तरीके से लें SSRF और क्लाउड मेटाडेटा: जोखिम और बचाव