@@ -10,7 +10,7 @@ private import semmle.python.Concepts
1010private import semmle.python.dataflow.new.RemoteFlowSources
1111private import semmle.python.dataflow.new.BarrierGuards
1212private import semmle.python.frameworks.data.ModelsAsData
13- private import semmle.python.ApiGraphs
13+ private import semmle.python.frameworks.OpenAI
1414
1515/**
1616 * Provides default sources, sinks and sanitizers for detecting
@@ -51,48 +51,7 @@ module PromptInjection {
5151
5252 private class PromptContentSink extends Sink {
5353 PromptContentSink ( ) {
54- exists ( API:: Node openai , API:: Node content |
55- openai =
56- API:: moduleImport ( "openai" )
57- .getMember ( [ "OpenAI" , "AsyncOpenAI" , "AzureOpenAI" ] )
58- .getReturn ( ) and
59- content =
60- [
61- openai
62- .getMember ( "responses" )
63- .getMember ( "create" )
64- .getKeywordParameter ( [ "input" , "instructions" ] ) ,
65- openai
66- .getMember ( "responses" )
67- .getMember ( "create" )
68- .getKeywordParameter ( [ "input" , "instructions" ] )
69- .getASubscript ( )
70- .getSubscript ( "content" ) ,
71- openai
72- .getMember ( "realtime" )
73- .getMember ( "connect" )
74- .getReturn ( )
75- .getMember ( "conversation" )
76- .getMember ( "item" )
77- .getMember ( "create" )
78- .getKeywordParameter ( "item" )
79- .getSubscript ( "content" ) ,
80- openai
81- .getMember ( "chat" )
82- .getMember ( "completions" )
83- .getMember ( "create" )
84- .getKeywordParameter ( "messages" )
85- .getASubscript ( )
86- .getSubscript ( "content" )
87- ]
88- |
89- // content
90- if not exists ( content .getASubscript ( ) )
91- then this = content .asSink ( )
92- else
93- // content.text
94- this = content .getASubscript ( ) .getSubscript ( "text" ) .asSink ( )
95- )
54+ this = OpenAI:: getContentNode ( ) .asSink ( )
9655 }
9756 }
9857
0 commit comments