Skip to content

Instantly share code, notes, and snippets.

View jsyeo's full-sized avatar
๐Ÿ’ญ
๐Ÿ’ ๐”๐“พ๐“ฎ๐Ÿฅถ๐“ฑ๐“พ๐“ช :female_fairy: ๐“น๐“ฒ๐“ช๐“ธ๐Ÿ˜ป๐“น๐“ฒ๐“ช๐“ธ๐Ÿ‘ฃ

Jason Yeo jsyeo

๐Ÿ’ญ
๐Ÿ’ ๐”๐“พ๐“ฎ๐Ÿฅถ๐“ฑ๐“พ๐“ช :female_fairy: ๐“น๐“ฒ๐“ช๐“ธ๐Ÿ˜ป๐“น๐“ฒ๐“ช๐“ธ๐Ÿ‘ฃ
View GitHub Profile
@jsyeo
jsyeo / Main.java
Last active August 29, 2015 14:28
Implement Generic Interface
public class Main {
public static void main(String[] args) {
MyInterface i = new MyImplementer();
i.foo(1);
/*
Since we actually call the vulnerable method, the call chain that we expect is:
Main.main(String[] args): 5
-> MyImplementer.foo(Integer): 36
@jsyeo
jsyeo / Main.java
Created August 24, 2015 07:56
Call Chain Test
/**
* level0 0
* / | \
* level1 0 1 2
* / | \ |\ |
* level2 0 1 2 34 5
* | | | || |
* \ \\ // /
* level0 main
*/
@jsyeo
jsyeo / Main.java
Created August 24, 2015 03:54
Object virtual call
public class Main {
public static void main(String[] args) {
Object a = new VulnerableClass();
a.toString();
}
}
class VulnerableClass {
@jsyeo
jsyeo / Main.java
Last active August 29, 2015 14:27
Object Equals
public class Main {
public static void main(String[] args) {
VulnerableClass a = new VulnerableClass(1);
VulnerableClass b = new VulnerableClass(2);
a.equals(b);
}
}
class VulnerableClass {
@jsyeo
jsyeo / Main.java
Created August 20, 2015 07:56
Type Erasure of Bounded Type Parameter
public class Main {
public static void main(String[] args) {
MyClass<Integer> c = new MyClass<Integer>();
c.vulnerableMethod(42);
}
}
class MyClass<T extends Comparable> {
void vulnerableMethod(T t) {
@jsyeo
jsyeo / Main.java
Created August 20, 2015 07:55
Type Erasure of Generic Method
public class Main {
public static void main(String[] args) {
Rectangle r = new Rectangle();
vulnerableDrawShape(r);
}
static <T extends Shape> void vulnerableDrawShape(T shape) {
}
@jsyeo
jsyeo / Main.java
Created August 20, 2015 07:19
Class with Unbounded Type Parameter
public class Main {
public static void main(String[] args) {
MyClass<Integer> c = new MyClass<>();
c.vulnerableMethod(1);
}
}
class MyClass<T> {
void vulnerableMethod(T t) {
@jsyeo
jsyeo / Main.java
Last active August 29, 2015 14:27
Implement Parameterized Interface
public class Main {
public static void main(String[] args) {
// Our code doesn't call the vulnerable method at all
}
}
/*
* This is our vulnerable class
*/
@jsyeo
jsyeo / RTA.java
Created August 17, 2015 11:10
Rapid Type Analysis Example
public class Main {
public static void main(String[] args) {
A a = new C();
a.m();
}
}
class A {
void m() {
}
@jsyeo
jsyeo / subinterface.java
Created August 17, 2015 01:05
Subinterface for Class Hierarchy Analysis
public class Main {
public static void main(String[] args) {
SuperInterface a = new ImplementerA();
a.foo();
SuperInterface b = new ImplementerB();
b.foo();
}
}