Skip to content
Open
Show file tree
Hide file tree
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
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
# Generated by Django 4.2.27 on 2026-04-10

from django.db import migrations


def migrate(apps, schema_editor):
PythonModule = apps.get_model("api_app", "PythonModule")
PeriodicTask = apps.get_model("django_celery_beat", "PeriodicTask")
pm = PythonModule.objects.filter(
module="greynoise_labs.GreynoiseLabs",
base_path="api_app.analyzers_manager.observable_analyzers",
).first()
if pm:
task_ids = [getattr(pm, "update_task_id", None)]
task_ids.extend(getattr(c, "health_check_task_id", None) for c in pm.analyzerconfigs.all())
PeriodicTask.objects.filter(id__in=[t for t in task_ids if t]).delete()

pm.analyzerconfigs.all().delete()
pm.delete()


class Migration(migrations.Migration):
dependencies = [
("api_app", "0062_alter_parameter_python_module"),
("analyzers_manager", "0189_update_capa_timeout"),
("django_celery_beat", "0001_initial"),
]

operations = [
migrations.RunPython(migrate, migrations.RunPython.noop),
]
130 changes: 0 additions & 130 deletions api_app/analyzers_manager/observable_analyzers/greynoise_labs.py

This file was deleted.

4 changes: 4 additions & 0 deletions api_app/analyzers_manager/observable_analyzers/hudsonrock.py
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,10 @@ def run(self):
+ self.get_param_url(["sortby", "page", "installed_software"])
)
response = requests.post(url, headers=headers, json={"login": self.observable_name})
else:
raise AnalyzerConfigurationException(
f"Invalid GENERIC observable (not an email): {self.observable_name}" + " for HudsonRock"
)
else:
raise AnalyzerConfigurationException(
f"Invalid observable type {self.observable_classification}"
Expand Down
1 change: 1 addition & 0 deletions api_app/analyzers_manager/observable_analyzers/validin.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ def _run_all_queries(self, endpoints, headers):
logger.error(f"Query {query_name} failed")

# we wont stop other quries from executing if one fails
continue
final_response[f"{query_name}"] = response.json()
except requests.RequestException as e:
raise AnalyzerRunException(e)
Expand Down
13 changes: 9 additions & 4 deletions api_app/connectors_manager/connectors/misp.py
Original file line number Diff line number Diff line change
Expand Up @@ -118,11 +118,16 @@ def run(self):
# append attribute name to event info
event.info += f": {self._base_attr_obj.value}"

# add event to MISP Instance
misp_event = misp_instance.add_event(event, pythonify=True)
# add attributes to event on MISP Instance
# bulk: attach all attributes to the event object before sending
for attr in attributes:
misp_instance.add_attribute(misp_event.id, attr)
event.add_attribute(
attr.type,
attr.value,
**{k: v for k, v in attr.to_dict().items() if k not in ("type", "value", "uuid")},
)

# single request — event + all attributes sent together
misp_event = misp_instance.add_event(event, pythonify=True)

return misp_instance.get_event(misp_event.id)

Expand Down
6 changes: 3 additions & 3 deletions frontend/src/constants/miscConst.js
Original file line number Diff line number Diff line change
Expand Up @@ -28,9 +28,9 @@ export const localTimezone = Intl.DateTimeFormat().resolvedOptions().timeZone;
export const HistoryPages = Object.freeze({
JOB: "jobs",
INVESTIGAITON: "investigations",
USER_EVENT: "user-events",
USER_DOMAIN_WILDCARD_EVENT: "user-domain-wildcard-events",
USER_IP_WILDCARD_EVENT: "user-ip-wildcard-events",
USER_EVENT: "user-evaluations",
USER_DOMAIN_WILDCARD_EVENT: "user-domain-wildcard-evaluations",
USER_IP_WILDCARD_EVENT: "user-ip-wildcard-evaluations",
});

export const Classifications = Object.freeze({
Expand Down
4 changes: 3 additions & 1 deletion integrations/malware_tools_analyzers/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -60,10 +60,12 @@ RUN if [[ $TARGETARCH == "amd64" ]]; then \
# Build guelfo's PEFrame
WORKDIR ${PROJECT_PATH}/peframe
COPY requirements/peframe-requirements.txt ./
# peframe-ds 6.1.0 uses array.tostring() which was removed in Python 3.9+, patch it after install
RUN python3 -m venv venv \
&& . venv/bin/activate \
&& pip3 install --no-cache-dir --upgrade pip \
&& pip3 install --no-cache-dir -r peframe-requirements.txt --no-cache-dir
&& pip3 install --no-cache-dir -r peframe-requirements.txt --no-cache-dir \
&& sed -i 's/\.tostring()/\.tobytes()/g' venv/lib/python3.*/site-packages/peframe/modules/features.py

# Install guelfo's artifacts
# there is no version management on this project so we just pull the most recent changes
Expand Down
41 changes: 41 additions & 0 deletions issues_latest.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
[
{
"number": 3653,
"title": "[BUG] job_pipeline task does not set job's final status on exception jobs get stuck in RUNNING forever",
"url": "https://github.com/intelowlproject/IntelOwl/issues/3653",
"labels": [
"bug"
]
},
{
"number": 3647,
"title": "[Bug] HudsonRock analyzer crashes when GENERIC observable is not an email",
"url": "https://github.com/intelowlproject/IntelOwl/issues/3647",
"labels": [
"bug"
]
},
{
"number": 3639,
"title": "Race condition in Job creation causes data loss",
"url": "https://github.com/intelowlproject/IntelOwl/issues/3639",
"labels": [
"bug"
]
},
{
"number": 3623,
"title": "Cross-organization data leakage in plugin_state_viewer endpoint",
"url": "https://github.com/intelowlproject/IntelOwl/issues/3623",
"labels": []
},
{
"number": 3622,
"title": "History artifacts tabs are broken",
"url": "https://github.com/intelowlproject/IntelOwl/issues/3622",
"labels": [
"bug",
"frontend"
]
}
]

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
from api_app.analyzers_manager.exceptions import AnalyzerConfigurationException
from api_app.analyzers_manager.observable_analyzers.hudsonrock import HudsonRock
from tests.api_app.analyzers_manager.unit_tests.observable_analyzers.base_test_class import (
BaseAnalyzerTest,
Expand Down Expand Up @@ -37,3 +38,11 @@ def get_mocked_response():
200,
),
)

def test_invalid_generic_raises_exception(self):
config = self.get_extra_config()
config["observable_name"] = "johndoe123"

analyzer = self.analyzer_class(**config)
with self.assertRaises(AnalyzerConfigurationException):
analyzer.run()
Loading
Loading