The application logs data that appears to originate from an untrusted source, such as a user-editable text field or a web view, without proper neutralization. This can lead to a log injection vulnerability.
An attacker could insert fake log entries, corrupt the log format, or inject malicious content (e.g., stored XSS payloads) that could be executed by a log viewing application. This manipulation can be used to cover tracks, mislead administrators, or attack other systems that consume the logs.
To mitigate this vulnerability, all untrusted input should be validated and sanitized before being written to logs. Specifically, newline characters (\r, \n) and other control characters should be removed or escaped to prevent log entry forgery.
Non-Compliant Code Examples
importUIKitimportWebKitimportos.logclassUserProfileViewController:UIViewController,WKNavigationDelegate{varnicknameField:UITextField!varwebView:WKWebView!funcwebView(_webView:WKWebView,decidePolicyFornavigationAction:WKNavigationAction,decisionHandler:@escaping(WKNavigationActionPolicy)->Void){ifleturl=navigationAction.request.url{// --- VULNERABLE ---// The 'query' part of a URL can contain malicious input.print("Processing navigation action with query: \(url.query??"none")")}decisionHandler(.allow)}}
Compliant Code Examples
importUIKitimportWebKitimportos.logclassUserProfileViewController:UIViewController,WKNavigationDelegate{varnicknameField:UITextField!varwebView:WKWebView!// A helper function to sanitize strings before logging.// It removes characters that could be used to forge log entries.privatefuncsanitizeForLogging(_input:String)->String{returninput.replacingOccurrences(of:"\r",with:"").replacingOccurrences(of:"\n",with:"")}funcwebView(_webView:WKWebView,decidePolicyFornavigationAction:WKNavigationAction,decisionHandler:@escaping(WKNavigationActionPolicy)->Void){ifleturl=navigationAction.request.url,letquery=url.query{// --- FIXED ---// The query string is sanitized before being logged.letsanitizedQuery=sanitizeForLogging(query)print("Processing navigation action with sanitized query: \(sanitizedQuery)")}decisionHandler(.allow)}}
원활한 통합. Datadog Code Security를 경험해 보세요
Datadog Code Security
이 규칙을 사용해 Datadog Code Security로 코드를 분석하세요
규칙 사용 방법
1
2
rulesets:- swift-security # Rules to enforce Swift security.
리포지토리 루트에 위의 내용을 포함하는 static-analysis.datadog.yml을 만듭니다
무료 IDE 플러그인을 사용하거나 CI 파이프라인에 Code Security 검사를 추가합니다