Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Adversaries may abuse Android's `startForeground()` API method to maintain continuous sensor access.
.claude/skills/cyberstrikeus-t1541-foreground-persistence/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-08 | ✗→✓ | ▲ Improved | -73% | 0% |
| case-15 | ✗→✓ | ▲ Improved | 8% | 0% |
| case-16 | ✗→✓ | ▲ Improved | -54% | 0% |
| case-04 | ✓→✓ | = Same ✓ | 54% | 0% |
| case-05 | ✓→✓ | = Same ✓ | 4% | 0% |
Adversaries may abuse Android's startForeground() API method to maintain continuous sensor access. Beginning in Android 9, idle applications running in the background no longer have access to device sensors, such as the camera, microphone, and gyroscope. Applications can retain sensor access by running in the foreground, using Android’s startForeground() API method. This informs the system that the user is actively interacting with the application, and it should not be killed. The only requirement to start a foreground service is showing a persistent notification to the user.
Malicious applications may abuse the startForeground() API method to continue running in the foreground, while presenting a notification to the user pretending to be a genuine application. This would allow unhindered access to the device’s sensors, assuming permission has been previously granted.
Malicious applications may also abuse the startForeground() API to inform the Android system that the user is actively interacting with the application, thus preventing it from being killed by the low memory killer.
Platforms: Android
Determine if the target mobile environment is susceptible to Foreground Persistence by examining the target platforms (Android).
Review whether mitigations for T1541 are in place. If defenses are absent or misconfigured, this technique may be exploitable.
If a user sees a persistent notification they do not recognize, they should uninstall the source application and look for other unwanted applications or anomalies.
| Finding | Severity | Impact | | ------------------------------------------- | -------- | --------------- | | Foreground Persistence technique applicable | Low | Defense Evasion |
| CWE ID | Title | | ------- | ---------------------------- | | CWE-693 | Protection Mechanism Failure |
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 29,134 | 56,854 | +95% | 1 | 1 | 0% | 3,942 | 4,837 | +23% | 0 | 0 | — |
case-02 | fail→fail | 32,860 | 30,396 | -7% | 1 | 1 | 0% | 3,825 | 5,119 | +34% | 0 | 0 | — |
case-03 | fail→fail | 43,574 | 35,331 | -19% | 1 | 1 | 0% | 4,711 | 5,476 | +16% | 0 | 0 | — |
case-04 | pass→pass | 25,281 | 30,365 | +20% | 1 | 1 | 0% | 2,772 | 4,269 | +54% | 0 | 0 | — |
case-05 | pass→pass | 27,356 | 30,426 | +11% | 1 | 1 | 0% | 3,939 | 4,102 | +4% | 0 | 0 | — |
case-06 | fail→fail | 25,039 | 33,420 | +33% | 1 | 1 | 0% | 2,649 | 4,893 | +85% | 0 | 0 | — |
case-07 | fail→fail | 16,147 | 36,994 | +129% | 1 | 1 | 0% | 2,360 | 3,082 | +31% | 0 | 0 | — |
case-08 | fail→pass | 24,728 | 8,239 | -67% | 1 | 1 | 0% | 4,384 | 1,181 | -73% | 0 | 0 | — |
case-09 | pass→pass | 10,900 | 29,186 | +168% | 1 | 1 | 0% | 1,811 | 1,610 | -11% | 0 | 0 | — |
case-10 | pass→pass | 14,658 | 7,949 | -46% | 1 | 1 | 0% | 1,220 | 1,204 | -1% | 0 | 0 | — |
case-11 | pass→pass | 19,228 | 10,676 | -44% | 1 | 1 | 0% | 2,703 | 1,081 | -60% | 0 | 0 | — |
case-17 | pass→pass | 11,937 | 2,131 | -82% | 1 | 1 | 0% | 959 | 1,082 | +13% | 0 | 0 | — |
case-12 | pass→pass | 11,160 | 8,286 | -26% | 1 | 1 | 0% | 1,476 | 1,246 | -16% | 0 | 0 | — |
case-13 | pass→pass | 13,314 | 16,668 | +25% | 1 | 1 | 0% | 1,919 | 2,586 | +35% | 0 | 0 | — |
case-14 | pass→pass | 14,340 | 14,548 | +1% | 1 | 1 | 0% | 2,229 | 1,957 | -12% | 0 | 0 | — |
case-15 | fail→pass | 12,241 | 8,140 | -34% | 1 | 1 | 0% | 1,023 | 1,108 | +8% | 0 | 0 | — |
case-16 | fail→pass | 16,800 | 8,091 | -52% | 1 | 1 | 0% | 2,438 | 1,120 | -54% | 0 | 0 | — |
case-18 | pass→pass | 17,695 | 9,624 | -46% | 1 | 1 | 0% | 1,573 | 1,215 | -23% | 0 | 0 | — |
case-19 | pass→pass | 15,535 | 10,597 | -32% | 1 | 1 | 0% | 1,270 | 1,134 | -11% | 0 | 0 | — |
case-20 | pass→pass | 22,342 | 11,306 | -49% | 1 | 1 | 0% | 2,260 | 1,629 | -28% | 0 | 0 | — |
case-21 | pass→pass | 17,186 | 34,427 | +100% | 1 | 1 | 0% | 2,809 | 4,941 | +76% | 0 | 0 | — |
case-22 | pass→pass | 16,172 | 16,503 | +2% | 1 | 1 | 0% | 2,056 | 2,474 | +20% | 0 | 0 | — |
case-23 | pass→pass | 16,195 | 9,138 | -44% | 1 | 1 | 0% | 1,417 | 1,383 | -2% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 23 cases were attempted. The headline lift of +13 percentage points is the difference between those two pass rates over the 23 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.