Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: inherit AbstractModule to prevent stuck queues #127

Merged
merged 1 commit into from
Sep 8, 2021
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
93 changes: 49 additions & 44 deletions bin/Cve.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,56 +10,61 @@

"""

##################################
# Import External packages
##################################
import time
import re
from pubsublogger import publisher

##################################
# Import Project packages
##################################
from modules.abstract_module import AbstractModule
from packages import Paste
from Helper import Process


def search_cve(message):
filepath, count = message.split()
paste = Paste.Paste(filepath)
content = paste.get_p_content()
# regex to find CVE
reg_cve = re.compile(r'(CVE-)[1-2]\d{1,4}-\d{1,5}')
# list of the regex results in the Paste, may be null
results = set(reg_cve.findall(content))
class Cve(AbstractModule):
"""
Cve module for AIL framework
"""

def __init__(self):
super(Cve, self).__init__()

# regex to find CVE
self.reg_cve = re.compile(r'(CVE-)[1-2]\d{1,4}-\d{1,5}')

# Waiting time in secondes between to message proccessed
self.pending_seconds = 1

# Send module state to logs
self.redis_logger.info(f'Module {self.module_name} initialized')


# if the list is greater than 2, we consider the Paste may contain a list of cve
if len(results) > 0:
print('{} contains CVEs'.format(paste.p_name))
publisher.warning('{} contains CVEs'.format(paste.p_name))
def compute(self, message):

filepath, count = message.split()
paste = Paste.Paste(filepath)
content = paste.get_p_content()

# list of the regex results in the Paste, may be null
results = set(self.reg_cve.findall(content))

# if the list is positive, we consider the Paste may contain a list of cve
if len(results) > 0:
warning = f'{paste.p_name} contains CVEs'
print(warning)
self.redis_logger.warning(warning)

msg = f'infoleak:automatic-detection="cve";{filepath}'
# Send to Tags Queue
self.send_message_to_queue(msg, 'Tags')
# Send to Duplicate Queue
self.send_message_to_queue(filepath, 'Duplicate')

msg = 'infoleak:automatic-detection="cve";{}'.format(filepath)
p.populate_set_out(msg, 'Tags')
#Send to duplicate
p.populate_set_out(filepath, 'Duplicate')

if __name__ == '__main__':
# If you wish to use an other port of channel, do not forget to run a subscriber accordingly (see launch_logs.sh)
# Port of the redis instance used by pubsublogger
publisher.port = 6380
# Script is the default channel used for the modules.
publisher.channel = 'Script'

# Section name in bin/packages/modules.cfg
config_section = 'Cve'

# Setup the I/O queues
p = Process(config_section)

# Sent to the logging a description of the module
publisher.info("Run CVE module")

# Endless loop getting messages from the input queue
while True:
# Get one message from the input queue
message = p.get_from_set()
if message is None:
publisher.debug("{} queue is empty, waiting".format(config_section))
time.sleep(1)
continue

# Do something with the message from the queue
search_cve(message)

module = Cve()
module.run()