github / github/codeql

False negative: AndroidInsecureLocalAuthentication.ql

Ouverte
#21,526 1 commentaire 0 réactions 0 personnes assignées Voir sur GitHub
question
Langage dominant
CodeQL
Étoiles
10.1k
Forks
2.1k
Merge moyen
2 j 15 h
PR mergées (30 j)
141

Description

Version
codeql 2.23.9

When I detect the code like this using Security/CWE/CWE-287/AndroidInsecureLocalAuthentication.ql, the problem is reported normally:
```java
package scensct.core.pos;
import android.hardware.fingerprint.FingerprintManager;
public class PosCase1 extends FingerprintManager.AuthenticationCallback {
@Override
public void onAuthenticationSucceeded(FingerprintManager.AuthenticationResult result) { // [REPORTED LINE]
// Parameter 'result' is declared but never accessed or referenced.
// No cryptographic operation or any use of 'result'.
System.out.println("Authentication succeeded.");
}
}
```
However, when I insert a temporary variable, AndroidInsecureLocalAuthentication.ql is unable to detect the problem:
```java
package scensct.var.pos;

import android.hardware.fingerprint.FingerprintManager;

public class PosCase1_Var3 extends FingerprintManager.AuthenticationCallback {
@Override
public void onAuthenticationSucceeded(FingerprintManager.AuthenticationResult result) {
// Introduce a temporary variable that shadows but does not use result.
Object ignored = result;
// Still no cryptographic operation or actual usage.
System.out.println("Authentication succeeded.");
// The 'ignored' variable is never read.
}
}
```
AndroidInsecureLocalAuthentication.ql scanning the following code also fails to detect the issue:
```java
package scensct.var.pos;

import android.hardware.biometrics.BiometricPrompt;

public class PosCase2_Var1 extends BiometricPrompt.AuthenticationCallback {
@Override
public void onAuthenticationSucceeded(BiometricPrompt.AuthenticationResult result) {
// Introduce a temporary variable that does not change the usage
BiometricPrompt.AuthenticationResult res = result;
super.onAuthenticationSucceeded(res);
}
}
```

```java

package scensct.var.pos;

import android.hardware.biometrics.BiometricPrompt;

public class PosCase2_Var4 extends BiometricPrompt.AuthenticationCallback {
// Extract a private helper method that only passes the parameter
private void callSuper(BiometricPrompt.AuthenticationResult r) {
super.onAuthenticationSucceeded(r);
}

@Override
public void onAuthenticationSucceeded(BiometricPrompt.AuthenticationResult result) {
callSuper(result);
}
}
```

```java

package scensct.var.pos;

import android.hardware.biometrics.BiometricPrompt;

public class PosCase2_Var5 extends BiometricPrompt.AuthenticationCallback {
@Override
public void onAuthenticationSucceeded(BiometricPrompt.AuthenticationResult result) {
// Add a redundant local variable and a no-op statement
BiometricPrompt.AuthenticationResult authResult = result;
int dummy = 0; // unrelated to result
super.onAuthenticationSucceeded(authResult);
}
}

```

Guide de contribution

Ouvrir le guide de contribution

Piste de recherche

Start with Security/CWE/CWE-287/AndroidInsecureLocalAuthentication.ql and reproduce the reported Java examples, comparing direct parameter use with assignments, delegation, and calls through a helper. Done means the query reports insecure authentication handling consistently for the provided variants without false negatives.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
java
Domaine
security
Type d'issue
Bug
Difficulté
3/5
Temps estimé
1-2 jours
Activité
Calme
Clarté
Plutôt claire
Accessibilité débutants
55/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.