diff --git a/security/caldera-ot/Makefile b/security/caldera-ot/Makefile index 4596236f08ca..52b562709bc9 100644 --- a/security/caldera-ot/Makefile +++ b/security/caldera-ot/Makefile @@ -1,74 +1,101 @@ PORTNAME= caldera-ot DISTVERSION= 4.2.0 -PORTREVISION= 3 +PORTREVISION= 4 CATEGORIES= security python MAINTAINER= acm@FreeBSD.org COMMENT= caldera OT plugin and capabilities WWW= https://github.com/mitre/caldera-ot LICENSE= APACHE20 LICENSE_FILE= ${WRKSRC}/LICENSE BUILD_DEPENDS= bacnet-stack>0:devel/bacnet-stack \ - nuitka3:devel/nuitka + cmake:devel/cmake-core \ + nuitka3:devel/nuitka \ + argtable3>0:devel/argtable3 \ + libiec61850>0:devel/libiec61850 RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}aiohttp>0:www/py-aiohttp@${PY_FLAVOR} \ ${PYTHON_PKGNAMEPREFIX}pymodbus>0:comms/py-pymodbus@${PY_FLAVOR} \ ${PYTHON_PKGNAMEPREFIX}pyserial>0:comms/py-pyserial@${PY_FLAVOR} \ ${PYTHON_PKGNAMEPREFIX}six>0:devel/py-six@${PY_FLAVOR} \ - ${LOCALBASE}/www/caldera/app/__init__.py:security/caldera + ${PYTHON_PKGNAMEPREFIX}pnio-dcp>0:devel/py-pnio-dcp@${PY_FLAVOR} \ + caldera4>0:security/caldera4 USE_GITHUB= yes GH_ACCOUNT= mitre GH_PROJECT= ${PORTNAME} GH_TAGNAME= 6c6b971d96de121da33f27aa6f80806835346b23 GH_TUPLE= mitre:bacnet:745432c:bacnet/bacnet \ mitre:dnp3:01e3748:dnp3/dnp3 \ - mitre:modbus:e47e259:modbus/modbus + mitre:modbus:e47e259:modbus/modbus \ + mitre:iec61850:a72e2c1:iec61850/iec61850 \ + mitre:profinet:7e62daa:profinet/profinet USES= compiler:c++11-lang dos2unix python DOS2UNIX_REGEX= .*\.([yml]) CALDERA_USER= caldera CALDERA_GROUP= caldera USERS= ${CALDERA_USER} GROUPS= ${CALDERA_GROUP} WWWDIR= ${PREFIX}/www/caldera SUB_FILES= pkg-message SUB_LIST= WWWDIR=${WWWDIR} post-extract: ${RM} -R ${WRKSRC}/.github cd ${WRKSRC} && ${RM} -f .coveragerc .dockerignore .eslintrc.js .flake8 \ .git* .pre* .stylelintrc.json Dockerfile post-patch: ${REINPLACE_CMD} -i "" -e 's|.sync|.tcp|g' ${WRKSRC}/modbus/src/src/modbus/client.py cd ${WRKSRC} && \ ${FIND} . -type f -name "*.orig" -exec ${RM} "{}" \; do-build: @${MKDIR} ${WRKDIR}/modbus_cli-build + @${MKDIR} ${WRKDIR}/profinet-build + @${MKDIR} ${WRKDIR}/iec61850-build + @${CP} ${WRKSRC}/profinet/src/dcp_utility.py ${WRKDIR}/profinet-build/dcp_utility.py cd ${WRKSRC}/bacnet/src/bacnet-stack/apps && \ ${CC} readprop/main.c -I${LOCALBASE}/include -L${LOCALBASE}/lib \ -lbacnet-stack -o ${WRKSRC}/bacnet/payloads/bacrp-freebsd cd ${WRKSRC}/bacnet/src/bacnet-stack/apps && \ ${CC} readprop/main.c -I${LOCALBASE}/include -L${LOCALBASE}/lib \ -lbacnet-stack -o ${WRKSRC}/bacnet/payloads/bacwp-freebsd + cd ${WRKDIR}/iec61850-build && \ + cmake ${WRKSRC}/iec61850/src/ -DLOCALBASE=${LOCALBASE} -DBUILD_SYSTEM=ON && \ + cmake --build . cd ${WRKSRC}/modbus/src/src && \ ${LOCALBASE}/bin/nuitka3 --standalone --onefile \ - --output-filename=modbus_cli-freebsd --output-dir=${WRKDIR}/modbus_cli-build modbus_cli.py + --output-filename=modbus_cli_freebsd --output-dir=${WRKDIR}/modbus_cli-build modbus_cli.py + cd ${WRKDIR}/profinet-build && \ + ${LOCALBASE}/bin/nuitka3 --standalone --onefile \ + --output-filename=dcp_utility_freebsd --output-dir=${WRKDIR}/profinet-build dcp_utility.py do-install: @${MKDIR} ${STAGEDIR}${WWWDIR}/plugins/bacnet @${MKDIR} ${STAGEDIR}${WWWDIR}/plugins/dnp3 @${MKDIR} ${STAGEDIR}${WWWDIR}/plugins/modbus + @${MKDIR} ${STAGEDIR}${WWWDIR}/plugins/iec61850 + @${MKDIR} ${STAGEDIR}${WWWDIR}/plugins/profinet @cd ${WRKSRC}/bacnet && ${COPYTREE_SHARE} . ${STAGEDIR}/${WWWDIR}/plugins/bacnet @cd ${WRKSRC}/dnp3 && ${COPYTREE_SHARE} . ${STAGEDIR}/${WWWDIR}/plugins/dnp3 @cd ${WRKSRC}/modbus && ${COPYTREE_SHARE} . ${STAGEDIR}/${WWWDIR}/plugins/modbus - ${INSTALL_PROGRAM} ${WRKDIR}/modbus_cli-build/modbus_cli-freebsd \ - ${STAGEDIR}/${WWWDIR}/plugins/modbus/payloads/ + @cd ${WRKSRC}/iec61850 && ${COPYTREE_SHARE} . ${STAGEDIR}/${WWWDIR}/plugins/iec61850 + @cd ${WRKSRC}/profinet && ${COPYTREE_SHARE} . ${STAGEDIR}/${WWWDIR}/plugins/profinet + ${INSTALL_PROGRAM} ${WRKDIR}/modbus_cli-build/modbus_cli_freebsd \ + ${STAGEDIR}/${WWWDIR}/plugins/modbus/payloads/modbus_cli_freebsd + ${INSTALL_PROGRAM} ${WRKDIR}/iec61850-build/bin/iec61850_actions \ + ${STAGEDIR}/${WWWDIR}/plugins/iec61850/payloads/iec61850_actions_freebsd + ${INSTALL_PROGRAM} ${WRKDIR}/profinet-build/dcp_utility_freebsd \ + ${STAGEDIR}/${WWWDIR}/plugins/profinet/payloads/dcp_utility_freebsd + +post-install: + ${STRIP_CMD} ${STAGEDIR}/${WWWDIR}/plugins/bacnet/payloads/bacwp-freebsd + ${STRIP_CMD} ${STAGEDIR}/${WWWDIR}/plugins/bacnet/payloads/bacrp-freebsd .include diff --git a/security/caldera-ot/distinfo b/security/caldera-ot/distinfo index 15e419584f6c..376173ddbb79 100644 --- a/security/caldera-ot/distinfo +++ b/security/caldera-ot/distinfo @@ -1,9 +1,13 @@ -TIMESTAMP = 1698267655 +TIMESTAMP = 1708238060 SHA256 (mitre-caldera-ot-4.2.0-6c6b971d96de121da33f27aa6f80806835346b23_GH0.tar.gz) = a4568765b1a373870ae00b781aa251ac94af089b46a3239bf743b0430405844e SIZE (mitre-caldera-ot-4.2.0-6c6b971d96de121da33f27aa6f80806835346b23_GH0.tar.gz) = 5887 SHA256 (mitre-bacnet-745432c_GH0.tar.gz) = 60763dc1f3670124f3ec0caf11dd2a3c71def7689c6e90af66864e9924853ad7 SIZE (mitre-bacnet-745432c_GH0.tar.gz) = 2493167 SHA256 (mitre-dnp3-01e3748_GH0.tar.gz) = 5324a9910b22dd101ef52b2b48334f67d4e9d1f05a1abaa02b7b097a96dbee64 SIZE (mitre-dnp3-01e3748_GH0.tar.gz) = 97589582 SHA256 (mitre-modbus-e47e259_GH0.tar.gz) = 2094210dbf96c0f60d7d5146e4ec7855e19b4bc23b47d51b906aa5961222c14d SIZE (mitre-modbus-e47e259_GH0.tar.gz) = 38272647 +SHA256 (mitre-iec61850-a72e2c1_GH0.tar.gz) = a75623efb6bdb686ba63615a5861b1e5de8704fe4ba5339bacb54b1e162918be +SIZE (mitre-iec61850-a72e2c1_GH0.tar.gz) = 1140484 +SHA256 (mitre-profinet-7e62daa_GH0.tar.gz) = a7e747ac604dae44d2c5a64e35b9220af0ff42d8b043c818e25e5f3f0f9a34f9 +SIZE (mitre-profinet-7e62daa_GH0.tar.gz) = 24278633 diff --git a/security/caldera-ot/files/patch-iec61850_data_abilities_collection_04ccfa36-f576-379f-a268-6283de403ad8.yml b/security/caldera-ot/files/patch-iec61850_data_abilities_collection_04ccfa36-f576-379f-a268-6283de403ad8.yml new file mode 100644 index 000000000000..4574a3b006f7 --- /dev/null +++ b/security/caldera-ot/files/patch-iec61850_data_abilities_collection_04ccfa36-f576-379f-a268-6283de403ad8.yml @@ -0,0 +1,23 @@ +--- iec61850/data/abilities/collection/04ccfa36-f576-379f-a268-6283de403ad8.yml.orig 2024-02-18 18:34:52 UTC ++++ iec61850/data/abilities/collection/04ccfa36-f576-379f-a268-6283de403ad8.yml +@@ -52,6 +52,20 @@ + - source: iec61850.device.name + edge: has_node + target: iec61850.node.name ++ freebsd: ++ sh: ++ command: './iec61850_actions_freebsd get data_sets #{iec61850.server.ip}' ++ payloads: ++ - iec61850_actions_freebsd ++ timeout: 360 ++ parsers: ++ plugins.iec61850.app.parsers.data_set: ++ - source: iec61850.device.name ++ edge: has_dataset ++ target: iec61850.dataset.name ++ - source: iec61850.device.name ++ edge: has_node ++ target: iec61850.node.name + repeatable: true + plugin: iec61850 + additional_info: diff --git a/security/caldera-ot/files/patch-iec61850_data_abilities_collection_15758d41-4237-34eb-adb2-d5698e3ea4ff.yml b/security/caldera-ot/files/patch-iec61850_data_abilities_collection_15758d41-4237-34eb-adb2-d5698e3ea4ff.yml new file mode 100644 index 000000000000..db8d2f34ec4e --- /dev/null +++ b/security/caldera-ot/files/patch-iec61850_data_abilities_collection_15758d41-4237-34eb-adb2-d5698e3ea4ff.yml @@ -0,0 +1,21 @@ +--- iec61850/data/abilities/collection/15758d41-4237-34eb-adb2-d5698e3ea4ff.yml.orig 2024-02-18 18:34:52 UTC ++++ iec61850/data/abilities/collection/15758d41-4237-34eb-adb2-d5698e3ea4ff.yml +@@ -27,10 +27,16 @@ + payloads: + - iec61850_actions + timeout: 360 ++ freebsd: ++ sh: ++ command: './iec61850_actions_freebsd get reports #{iec61850.server.ip}' ++ payloads: ++ - iec61850_actions_freebsd ++ timeout: 360 + repeatable: true + plugin: iec61850 + additional_info: + facts: + iec61850.server.ip: + default: null +- description: IP address of the server +\ No newline at end of file ++ description: IP address of the server diff --git a/security/caldera-ot/files/patch-iec61850_data_abilities_collection_1b7dcec1-0b12-3df4-b323-6c1b33356981.yml b/security/caldera-ot/files/patch-iec61850_data_abilities_collection_1b7dcec1-0b12-3df4-b323-6c1b33356981.yml new file mode 100644 index 000000000000..f2afe3214289 --- /dev/null +++ b/security/caldera-ot/files/patch-iec61850_data_abilities_collection_1b7dcec1-0b12-3df4-b323-6c1b33356981.yml @@ -0,0 +1,27 @@ +--- iec61850/data/abilities/collection/1b7dcec1-0b12-3df4-b323-6c1b33356981.yml.orig 2024-02-18 18:34:52 UTC ++++ iec61850/data/abilities/collection/1b7dcec1-0b12-3df4-b323-6c1b33356981.yml +@@ -67,6 +67,24 @@ + - source: iec61850.attribute.name + edge: has_value + target: iec61850.attribute.value ++ freebsd: ++ sh: ++ command: './iec61850_actions_freebsd get value #{iec61850.attribute.name} --fc #{iec61850.attribute.fc} ++ #{iec61850.server.ip}' ++ payloads: ++ - iec61850_actions_freebsd ++ timeout: 360 ++ parsers: ++ plugins.iec61850.app.parsers.value: ++ - source: iec61850.attribute.name ++ edge: has_fc ++ target: iec61850.attribute.fc ++ - source: iec61850.attribute.name ++ edge: has_datatype ++ target: iec61850.attribute.datatype ++ - source: iec61850.attribute.name ++ edge: has_value ++ target: iec61850.attribute.value + repeatable: true + plugin: iec61850 + additional_info: diff --git a/security/caldera-ot/files/patch-iec61850_data_abilities_collection_30419718-6f7c-3eab-8b06-ed6cea7858c7.yml b/security/caldera-ot/files/patch-iec61850_data_abilities_collection_30419718-6f7c-3eab-8b06-ed6cea7858c7.yml new file mode 100644 index 000000000000..e1983d712968 --- /dev/null +++ b/security/caldera-ot/files/patch-iec61850_data_abilities_collection_30419718-6f7c-3eab-8b06-ed6cea7858c7.yml @@ -0,0 +1,39 @@ +--- iec61850/data/abilities/collection/30419718-6f7c-3eab-8b06-ed6cea7858c7.yml.orig 2024-02-18 18:34:52 UTC ++++ iec61850/data/abilities/collection/30419718-6f7c-3eab-8b06-ed6cea7858c7.yml +@@ -102,6 +102,36 @@ + - source: iec61850.attribute.name + edge: has_datatype + target: iec61850.attribute.value ++ freebsd: ++ sh: ++ command: './iec61850_actions_freebsd get data_set_members #{iec61850.dataset.name} ++ #{iec61850.server.ip}' ++ payloads: ++ - iec61850_actions_freebsd ++ timeout: 360 ++ parsers: ++ plugins.iec61850.app.parsers.data_set: ++ - source: iec61850.device.name ++ edge: has_node ++ target: iec61850.node.name ++ - source: iec61850.device.name ++ edge: has_dataset ++ target: iec61850.dataset.name ++ - source: iec61850.node.name ++ edge: has_object ++ target: iec61850.object.name ++ - source: iec61850.object.name ++ edge: has_attribute ++ target: iec61850.attribute.name ++ - source: iec61850.attribute.name ++ edge: has_fc ++ target: iec61850.attribute.fc ++ - source: iec61850.attribute.name ++ edge: has_datatype ++ target: iec61850.attribute.datatype ++ - source: iec61850.attribute.name ++ edge: has_datatype ++ target: iec61850.attribute.value + repeatable: true + plugin: iec61850 + additional_info: diff --git a/security/caldera-ot/files/patch-iec61850_data_abilities_collection_4c1138da-50b9-3744-99ea-1310690f2743.yml b/security/caldera-ot/files/patch-iec61850_data_abilities_collection_4c1138da-50b9-3744-99ea-1310690f2743.yml new file mode 100644 index 000000000000..5ed31a7372a7 --- /dev/null +++ b/security/caldera-ot/files/patch-iec61850_data_abilities_collection_4c1138da-50b9-3744-99ea-1310690f2743.yml @@ -0,0 +1,15 @@ +--- iec61850/data/abilities/collection/4c1138da-50b9-3744-99ea-1310690f2743.yml.orig 2024-02-18 18:34:52 UTC ++++ iec61850/data/abilities/collection/4c1138da-50b9-3744-99ea-1310690f2743.yml +@@ -30,6 +30,12 @@ + payloads: + - iec61850_actions + timeout: 360 ++ freebsd: ++ sh: ++ command: './iec61850_actions_freebsd get log #{iec61850.lcb.name} #{iec61850.server.ip}' ++ payloads: ++ - iec61850_actions_freebsd ++ timeout: 360 + repeatable: true + plugin: iec61850 + additional_info: diff --git a/security/caldera-ot/files/patch-iec61850_data_abilities_collection_6ac44da4-f546-3e33-be1a-829b173b660f.yml b/security/caldera-ot/files/patch-iec61850_data_abilities_collection_6ac44da4-f546-3e33-be1a-829b173b660f.yml new file mode 100644 index 000000000000..dcb4fc19f26a --- /dev/null +++ b/security/caldera-ot/files/patch-iec61850_data_abilities_collection_6ac44da4-f546-3e33-be1a-829b173b660f.yml @@ -0,0 +1,30 @@ +--- iec61850/data/abilities/collection/6ac44da4-f546-3e33-be1a-829b173b660f.yml.orig 2024-02-18 18:34:52 UTC ++++ iec61850/data/abilities/collection/6ac44da4-f546-3e33-be1a-829b173b660f.yml +@@ -55,6 +55,20 @@ + - source: iec61850.node.name + edge: has_object + target: iec61850.object.name ++ freebsd: ++ sh: ++ command: './iec61850_actions_freebsd get data_objects #{iec61850.node.name} #{iec61850.server.ip}' ++ payloads: ++ - iec61850_actions_freebsd ++ timeout: 360 ++ parsers: ++ plugins.iec61850.app.parsers.data_model: ++ - source: iec61850.device.name ++ edge: has_node ++ target: iec61850.node.name ++ - source: iec61850.node.name ++ edge: has_object ++ target: iec61850.object.name + repeatable: true + plugin: iec61850 + additional_info: +@@ -64,4 +78,4 @@ + description: Name of a logical node + iec61850.server.ip: + default: null +- description: IP address of the server +\ No newline at end of file ++ description: IP address of the server diff --git a/security/caldera-ot/files/patch-iec61850_data_abilities_collection_9f7757da-1da9-3b35-90f3-fdab578be198.yml b/security/caldera-ot/files/patch-iec61850_data_abilities_collection_9f7757da-1da9-3b35-90f3-fdab578be198.yml new file mode 100644 index 000000000000..975b73a34681 --- /dev/null +++ b/security/caldera-ot/files/patch-iec61850_data_abilities_collection_9f7757da-1da9-3b35-90f3-fdab578be198.yml @@ -0,0 +1,32 @@ +--- iec61850/data/abilities/collection/9f7757da-1da9-3b35-90f3-fdab578be198.yml.orig 2024-02-18 18:34:52 UTC ++++ iec61850/data/abilities/collection/9f7757da-1da9-3b35-90f3-fdab578be198.yml +@@ -80,6 +80,29 @@ + - source: iec61850.device.name + edge: has_lcb + target: iec61850.lcb.name ++ freebsd: ++ sh: ++ command: './iec61850_actions_freebsd get log_blocks #{iec61850.server.ip}' ++ payloads: ++ - iec61850_actions_freebsd ++ timeout: 360 ++ parsers: ++ plugins.iec61850.app.parsers.lcb: ++ - source: iec61850.attribute.name ++ edge: has_fc ++ target: iec61850.attribute.fc ++ - source: iec61850.attribute.name ++ edge: has_datatype ++ target: iec61850.attribute.datatype ++ - source: iec61850.attribute.name ++ edge: has_value ++ target: iec61850.attribute.value ++ - source: iec61850.device.name ++ edge: has_node ++ target: iec61850.node.name ++ - source: iec61850.device.name ++ edge: has_lcb ++ target: iec61850.lcb.name + repeatable: true + plugin: iec61850 + additional_info: diff --git a/security/caldera-ot/files/patch-iec61850_data_abilities_collection_a0718ea1-9f55-3e24-b81a-c03f15eb89c2.yml b/security/caldera-ot/files/patch-iec61850_data_abilities_collection_a0718ea1-9f55-3e24-b81a-c03f15eb89c2.yml new file mode 100644 index 000000000000..65ea20dcbc9e --- /dev/null +++ b/security/caldera-ot/files/patch-iec61850_data_abilities_collection_a0718ea1-9f55-3e24-b81a-c03f15eb89c2.yml @@ -0,0 +1,15 @@ +--- iec61850/data/abilities/collection/a0718ea1-9f55-3e24-b81a-c03f15eb89c2.yml.orig 2024-02-18 18:34:52 UTC ++++ iec61850/data/abilities/collection/a0718ea1-9f55-3e24-b81a-c03f15eb89c2.yml +@@ -29,6 +29,12 @@ + payloads: + - iec61850_actions + timeout: 360 ++ freebsd: ++ sh: ++ command: './iec61850_actions_freebsd get files #{iec61850.server.ip}' ++ payloads: ++ - iec61850_actions_freebsd ++ timeout: 360 + repeatable: true + plugin: iec61850 + additional_info: diff --git a/security/caldera-ot/files/patch-iec61850_data_abilities_collection_bbb3e7dc-3103-3ae9-9a77-6eb789cb3a07.yml b/security/caldera-ot/files/patch-iec61850_data_abilities_collection_bbb3e7dc-3103-3ae9-9a77-6eb789cb3a07.yml new file mode 100644 index 000000000000..541c3fd3dc09 --- /dev/null +++ b/security/caldera-ot/files/patch-iec61850_data_abilities_collection_bbb3e7dc-3103-3ae9-9a77-6eb789cb3a07.yml @@ -0,0 +1,29 @@ +--- iec61850/data/abilities/collection/bbb3e7dc-3103-3ae9-9a77-6eb789cb3a07.yml.orig 2024-02-18 18:34:52 UTC ++++ iec61850/data/abilities/collection/bbb3e7dc-3103-3ae9-9a77-6eb789cb3a07.yml +@@ -75,6 +75,26 @@ + - source: iec61850.attribute.name + edge: has_fc + target: iec61850.attribute.fc ++ freebsd: ++ sh: ++ command: './iec61850_actions_freebsd get data_attributes #{iec61850.object.name} #{iec61850.server.ip}' ++ payloads: ++ - iec61850_actions_freebsd ++ timeout: 360 ++ parsers: ++ plugins.iec61850.app.parsers.data_model: ++ - source: iec61850.device.name ++ edge: has_node ++ target: iec61850.node.name ++ - source: iec61850.node.name ++ edge: has_object ++ target: iec61850.object.name ++ - source: iec61850.object.name ++ edge: has_attribute ++ target: iec61850.attribute.name ++ - source: iec61850.attribute.name ++ edge: has_fc ++ target: iec61850.attribute.fc + repeatable: true + plugin: iec61850 + additional_info: diff --git a/security/caldera-ot/files/patch-iec61850_data_abilities_collection_f9308f14-e0d3-389e-9d77-ff2be9c3f34f.yml b/security/caldera-ot/files/patch-iec61850_data_abilities_collection_f9308f14-e0d3-389e-9d77-ff2be9c3f34f.yml new file mode 100644 index 000000000000..86718035abc7 --- /dev/null +++ b/security/caldera-ot/files/patch-iec61850_data_abilities_collection_f9308f14-e0d3-389e-9d77-ff2be9c3f34f.yml @@ -0,0 +1,20 @@ +--- iec61850/data/abilities/collection/f9308f14-e0d3-389e-9d77-ff2be9c3f34f.yml.orig 2024-02-18 18:34:52 UTC ++++ iec61850/data/abilities/collection/f9308f14-e0d3-389e-9d77-ff2be9c3f34f.yml +@@ -46,6 +46,17 @@ + - source: iec61850.device.name + edge: has_node + target: iec61850.node.name ++ freebsd: ++ sh: ++ command: './iec61850_actions_freebsd get logical_nodes #{iec61850.device.name} #{iec61850.server.ip}' ++ payloads: ++ - iec61850_actions_freebsd ++ timeout: 360 ++ parsers: ++ plugins.iec61850.app.parsers.data_model: ++ - source: iec61850.device.name ++ edge: has_node ++ target: iec61850.node.name + repeatable: true + plugin: iec61850 + additional_info: diff --git a/security/caldera-ot/files/patch-iec61850_data_abilities_collection_fb81314b-0308-3761-b764-e523645e8df6.yml b/security/caldera-ot/files/patch-iec61850_data_abilities_collection_fb81314b-0308-3761-b764-e523645e8df6.yml new file mode 100644 index 000000000000..c52033d5ef68 --- /dev/null +++ b/security/caldera-ot/files/patch-iec61850_data_abilities_collection_fb81314b-0308-3761-b764-e523645e8df6.yml @@ -0,0 +1,18 @@ +--- iec61850/data/abilities/collection/fb81314b-0308-3761-b764-e523645e8df6.yml.orig 2024-02-18 18:34:52 UTC ++++ iec61850/data/abilities/collection/fb81314b-0308-3761-b764-e523645e8df6.yml +@@ -38,6 +38,15 @@ + parsers: + plugins.iec61850.app.parsers.data_model: + - source: iec61850.device.name ++ freebsd: ++ sh: ++ command: './iec61850_actions_freebsd get logical_devices #{iec61850.server.ip}' ++ payloads: ++ - iec61850_actions_freebsd ++ timeout: 360 ++ parsers: ++ plugins.iec61850.app.parsers.data_model: ++ - source: iec61850.device.name + repeatable: true + plugin: iec61850 + additional_info: diff --git a/security/caldera-ot/files/patch-iec61850_data_abilities_impair-process-control_6c0f9e77-eedf-4c25-a009-d8905f155af4.yml b/security/caldera-ot/files/patch-iec61850_data_abilities_impair-process-control_6c0f9e77-eedf-4c25-a009-d8905f155af4.yml new file mode 100644 index 000000000000..a6b637f25695 --- /dev/null +++ b/security/caldera-ot/files/patch-iec61850_data_abilities_impair-process-control_6c0f9e77-eedf-4c25-a009-d8905f155af4.yml @@ -0,0 +1,40 @@ +--- iec61850/data/abilities/impair-process-control/6c0f9e77-eedf-4c25-a009-d8905f155af4.yml.orig 2024-02-18 18:41:37 UTC ++++ iec61850/data/abilities/impair-process-control/6c0f9e77-eedf-4c25-a009-d8905f155af4.yml +@@ -87,6 +87,30 @@ + - source: iec61850.attribute.name + edge: has_value + target: iec61850.attribute.value ++ freebsd: ++ sh: ++ command: './iec61850_actions_freebsd control #{iec61850.object.name} --bool ++ #{iec61850.object.newvalue} --toggle #{iec61850.server.ip}' ++ payloads: ++ - iec61850_actions_freebsd ++ timeout: 360 ++ parsers: ++ plugins.iec61850.app.parsers.write: ++ - source: iec61850.device.name ++ edge: has_node ++ target: iec61850.node.name ++ - source: iec61850.node.name ++ edge: has_object ++ target: iec61850.object.name ++ - source: iec61850.object.name ++ edge: has_attribute ++ target: iec61850.attribute.name ++ - source: iec61850.attribute.name ++ edge: has_fc ++ target: iec61850.attribute.fc ++ - source: iec61850.attribute.name ++ edge: has_value ++ target: iec61850.attribute.value + repeatable: true + plugin: iec61850 + additional_info: +@@ -99,4 +123,4 @@ + description: New control value of an object + iec61850.server.ip: + default: null +- description: IP address of the server +\ No newline at end of file ++ description: IP address of the server diff --git a/security/caldera-ot/files/patch-iec61850_data_abilities_impair-process-control_dc65f8d1-9478-381c-8f25-2ef5edaea332.yml b/security/caldera-ot/files/patch-iec61850_data_abilities_impair-process-control_dc65f8d1-9478-381c-8f25-2ef5edaea332.yml new file mode 100644 index 000000000000..ed8d056b0602 --- /dev/null +++ b/security/caldera-ot/files/patch-iec61850_data_abilities_impair-process-control_dc65f8d1-9478-381c-8f25-2ef5edaea332.yml @@ -0,0 +1,40 @@ +--- iec61850/data/abilities/impair-process-control/dc65f8d1-9478-381c-8f25-2ef5edaea332.yml.orig 2024-02-18 18:41:37 UTC ++++ iec61850/data/abilities/impair-process-control/dc65f8d1-9478-381c-8f25-2ef5edaea332.yml +@@ -86,6 +86,30 @@ + - source: iec61850.attribute.name + edge: has_value + target: iec61850.attribute.value ++ freebsd: ++ sh: ++ command: './iec61850_actions_freebsd control #{iec61850.object.name} --#{iec61850.object.datatype} ++ #{iec61850.object.newvalue} #{iec61850.server.ip}' ++ payloads: ++ - iec61850_actions_freebsd ++ timeout: 360 ++ parsers: ++ plugins.iec61850.app.parsers.write: ++ - source: iec61850.device.name ++ edge: has_node ++ target: iec61850.node.name ++ - source: iec61850.node.name ++ edge: has_object ++ target: iec61850.object.name ++ - source: iec61850.object.name ++ edge: has_attribute ++ target: iec61850.attribute.name ++ - source: iec61850.attribute.name ++ edge: has_fc ++ target: iec61850.attribute.fc ++ - source: iec61850.attribute.name ++ edge: has_value ++ target: iec61850.attribute.value + repeatable: true + plugin: iec61850 + additional_info: +@@ -101,4 +125,4 @@ + description: New control value of an object + iec61850.server.ip: + default: null +- description: IP address of the server +\ No newline at end of file ++ description: IP address of the server diff --git a/security/caldera-ot/files/patch-iec61850_data_abilities_impair-process-control_dd9c8deb-be48-3ad0-b5f5-bf4976cb1d1e.yml b/security/caldera-ot/files/patch-iec61850_data_abilities_impair-process-control_dd9c8deb-be48-3ad0-b5f5-bf4976cb1d1e.yml new file mode 100644 index 000000000000..dae51b031f49 --- /dev/null +++ b/security/caldera-ot/files/patch-iec61850_data_abilities_impair-process-control_dd9c8deb-be48-3ad0-b5f5-bf4976cb1d1e.yml @@ -0,0 +1,33 @@ +--- iec61850/data/abilities/impair-process-control/dd9c8deb-be48-3ad0-b5f5-bf4976cb1d1e.yml.orig 2024-02-18 18:41:37 UTC ++++ iec61850/data/abilities/impair-process-control/dd9c8deb-be48-3ad0-b5f5-bf4976cb1d1e.yml +@@ -85,6 +85,30 @@ + - source: iec61850.attribute.name + edge: has_value + target: iec61850.attribute.value ++ freebsd: ++ sh: ++ command: './iec61850_actions_freebsd set #{iec61850.attribute.name} --#{iec61850.attribute.datatype} ++ #{iec61850.attribute.newvalue} --fc #{iec61850.attribute.fc} #{iec61850.server.ip}' ++ payloads: ++ - iec61850_actions_freebsd ++ timeout: 360 ++ parsers: ++ plugins.iec61850.app.parsers.write: ++ - source: iec61850.device.name ++ edge: has_node ++ target: iec61850.node.name ++ - source: iec61850.node.name ++ edge: has_object ++ target: iec61850.object.name ++ - source: iec61850.object.name ++ edge: has_attribute ++ target: iec61850.attribute.name ++ - source: iec61850.attribute.name ++ edge: has_fc ++ target: iec61850.attribute.fc ++ - source: iec61850.attribute.name ++ edge: has_value ++ target: iec61850.attribute.value + repeatable: true + plugin: iec61850 + additional_info: diff --git a/security/caldera-ot/files/patch-iec61850_data_abilities_inhibit-response-function_2b2e5724-42bc-3efc-b0e5-613a6f5bc996.yml b/security/caldera-ot/files/patch-iec61850_data_abilities_inhibit-response-function_2b2e5724-42bc-3efc-b0e5-613a6f5bc996.yml new file mode 100644 index 000000000000..71f519f08234 --- /dev/null +++ b/security/caldera-ot/files/patch-iec61850_data_abilities_inhibit-response-function_2b2e5724-42bc-3efc-b0e5-613a6f5bc996.yml @@ -0,0 +1,22 @@ +--- iec61850/data/abilities/inhibit-response-function/2b2e5724-42bc-3efc-b0e5-613a6f5bc996.yml.orig 2024-02-18 18:43:18 UTC ++++ iec61850/data/abilities/inhibit-response-function/2b2e5724-42bc-3efc-b0e5-613a6f5bc996.yml +@@ -29,6 +29,12 @@ + payloads: + - iec61850_actions + timeout: 360 ++ freebsd: ++ sh: ++ command: './iec61850_actions_freebsd delete file #{iec61850.file.name} #{iec61850.server.ip}' ++ payloads: ++ - iec61850_actions_freebsd ++ timeout: 360 + repeatable: true + plugin: iec61850 + additional_info: +@@ -38,4 +44,4 @@ + description: Name of a file + iec61850.server.ip: + default: null +- description: IP address of the server +\ No newline at end of file ++ description: IP address of the server diff --git a/security/caldera-ot/files/patch-iec61850_data_abilities_inhibit-response-function_41fd3989-b5bd-3892-9210-9bc053c355a5.yml b/security/caldera-ot/files/patch-iec61850_data_abilities_inhibit-response-function_41fd3989-b5bd-3892-9210-9bc053c355a5.yml new file mode 100644 index 000000000000..f8707151626b --- /dev/null +++ b/security/caldera-ot/files/patch-iec61850_data_abilities_inhibit-response-function_41fd3989-b5bd-3892-9210-9bc053c355a5.yml @@ -0,0 +1,22 @@ +--- iec61850/data/abilities/inhibit-response-function/41fd3989-b5bd-3892-9210-9bc053c355a5.yml.orig 2024-02-18 18:43:18 UTC ++++ iec61850/data/abilities/inhibit-response-function/41fd3989-b5bd-3892-9210-9bc053c355a5.yml +@@ -33,6 +33,12 @@ + payloads: + - iec61850_actions + timeout: 360 ++ freebsd: ++ sh: ++ command: './iec61850_actions_freebsd delete data_set #{iec61850.dataset.name} #{iec61850.server.ip}' ++ payloads: ++ - iec61850_actions_freebsd ++ timeout: 360 + repeatable: true + plugin: iec61850 + additional_info: +@@ -42,4 +48,4 @@ + description: Name of a dataset + iiec61850.server.ip: + default: null +- description: IP address of the server +\ No newline at end of file ++ description: IP address of the server diff --git a/security/caldera-ot/files/patch-iec61850_payloads_08cfc3e9-e172-4754-ae32-d1f28c9c819e.yml b/security/caldera-ot/files/patch-iec61850_payloads_08cfc3e9-e172-4754-ae32-d1f28c9c819e.yml new file mode 100644 index 000000000000..ac0fdcd6e8cf --- /dev/null +++ b/security/caldera-ot/files/patch-iec61850_payloads_08cfc3e9-e172-4754-ae32-d1f28c9c819e.yml @@ -0,0 +1,14 @@ +--- iec61850/payloads/08cfc3e9-e172-4754-ae32-d1f28c9c819e.yml.orig 2024-02-18 18:31:59 UTC ++++ iec61850/payloads/08cfc3e9-e172-4754-ae32-d1f28c9c819e.yml +@@ -9,6 +9,9 @@ standard_payloads: + iec61850_actions: + description: IEC 61850 Plugin Actions (Linux) - command line interface for a set of IEC 61850 services + id: 04a2cdd7-39df-4b11-8bea-2838e0744993 ++ iec61850_actions_freebsd: ++ description: IEC 61850 Plugin Actions (FreeBSD) - command line interface for a set of IEC 61850 services ++ id: 1a3306b8-ce8c-11ee-a38f-8851fb56e3b2 + iec61850_actions_darwin: + description: IEC 61850 Plugin Actions (Darwin) - command line interface for a set of IEC 61850 services +- id: c81479f7-7a77-4925-9dc7-1a791f999cf8 +\ No newline at end of file ++ id: c81479f7-7a77-4925-9dc7-1a791f999cf8 diff --git a/security/caldera-ot/files/patch-iec61850_src_CMakeLists.txt b/security/caldera-ot/files/patch-iec61850_src_CMakeLists.txt new file mode 100644 index 000000000000..ef5f1798367f --- /dev/null +++ b/security/caldera-ot/files/patch-iec61850_src_CMakeLists.txt @@ -0,0 +1,10 @@ +--- iec61850/src/CMakeLists.txt 2024-02-18 01:00:33.415323000 -0500 ++++ iec61850/src/CMakeLists.txt 2024-02-18 01:01:07.721231000 -0500 +@@ -40,6 +40,7 @@ + # add build options + option(BUILD_TESTS "Build tests" OFF) + option(BUILD_LOCAL "Build using local copies of dependencies" OFF) ++option(BUILD_SYSTEM "Build using system dependencies" OFF) + + # add subdirectories with respective CMakeLists.txt files + if(BUILD_LOCAL) diff --git a/security/caldera-ot/files/patch-iec61850_src_app_CMakeLists.txt b/security/caldera-ot/files/patch-iec61850_src_app_CMakeLists.txt new file mode 100644 index 000000000000..3ead9f0ebb76 --- /dev/null +++ b/security/caldera-ot/files/patch-iec61850_src_app_CMakeLists.txt @@ -0,0 +1,35 @@ +--- iec61850/src/app/CMakeLists.txt 2024-02-18 01:01:15.171907000 -0500 ++++ iec61850/src/app/CMakeLists.txt 2024-02-18 01:24:45.179116000 -0500 +@@ -5,15 +5,16 @@ + "${CMAKE_CURRENT_BINARY_DIR}/version.h") + + # fetch argtable3 +-if(NOT BUILD_LOCAL) ++if(NOT BUILD_LOCAL AND NOT BUILD_SYSTEM) + include(FetchContent) + FetchContent_Declare( + argtable3 + GIT_REPOSITORY https://github.com/argtable/argtable3.git + GIT_TAG "v3.2.2.f25c624") + FetchContent_MakeAvailable(argtable3) +-endif(NOT BUILD_LOCAL) ++endif(NOT BUILD_LOCAL AND NOT BUILD_SYSTEM) + ++if(NOT BUILD_SYSTEM) + add_dependencies(iec61850_actions argtable3) + get_target_property(argtable3_INCLUDE_DIR argtable3 INCLUDE_DIRECTORIES) + +@@ -21,6 +22,13 @@ + target_include_directories( + iec61850_actions PRIVATE ${argtable3_INCLUDE_DIR} ${CMAKE_CURRENT_SOURCE_DIR} + ${CMAKE_CURRENT_BINARY_DIR}) ++else() ++target_link_libraries(iec61850_actions PRIVATE iec61850_client ${LOCALBASE}/lib/libargtable3_static.a) ++target_include_directories( ++ iec61850_actions PRIVATE ${LOCALBASE}/include ${CMAKE_CURRENT_SOURCE_DIR} ++ ${CMAKE_CURRENT_BINARY_DIR}) ++endif(NOT BUILD_SYSTEM) ++ + target_compile_features(iec61850_actions PRIVATE c_std_11) + + if(APPLE) diff --git a/security/caldera-ot/files/patch-iec61850_src_lib_CMakeLists.txt b/security/caldera-ot/files/patch-iec61850_src_lib_CMakeLists.txt new file mode 100644 index 000000000000..c3c1c26d20a7 --- /dev/null +++ b/security/caldera-ot/files/patch-iec61850_src_lib_CMakeLists.txt @@ -0,0 +1,34 @@ +--- iec61850/src/lib/CMakeLists.txt 2024-02-18 01:24:59.343348000 -0500 ++++ iec61850/src/lib/CMakeLists.txt 2024-02-18 01:28:38.333758000 -0500 +@@ -14,15 +14,16 @@ + "${CMAKE_CURRENT_BINARY_DIR}/version.h") + + # fetch libiec61850 +-if(NOT BUILD_LOCAL) ++if(NOT BUILD_LOCAL AND NOT BUILD_SYSTEM) + include(FetchContent) + FetchContent_Declare( + libiec61850 + GIT_REPOSITORY https://github.com/mz-automation/libiec61850.git + GIT_TAG "v1.5.1") + FetchContent_MakeAvailable(libiec61850) +-endif(NOT BUILD_LOCAL) ++endif(NOT BUILD_LOCAL AND NOT BUILD_SYSTEM) + ++if(NOT BUILD_SYSTEM) + add_dependencies(iec61850_client iec61850) + get_target_property(libiec61850_INCLUDE_DIR iec61850 INCLUDE_DIRECTORIES) + +@@ -30,6 +31,12 @@ + target_include_directories( + iec61850_client PUBLIC ${libiec61850_INCLUDE_DIR} ${CMAKE_CURRENT_SOURCE_DIR} + ${CMAKE_CURRENT_BINARY_DIR}) ++else() ++target_link_libraries(iec61850_client PUBLIC ${LOCALBASE}/lib/libiec61850.a ${LOCALBASE}/lib/libhal.a pthread) ++target_include_directories( ++ iec61850_client PUBLIC ${LOCALBASE}/include/libiec61850 ${CMAKE_CURRENT_SOURCE_DIR} ++ ${CMAKE_CURRENT_BINARY_DIR}) ++endif(NOT BUILD_SYSTEM) + + if(MINGW) + target_link_libraries(iec61850_client PUBLIC ws2_32 iphlpapi) diff --git a/security/caldera-ot/files/patch-modbus-data-abilities-collection_001e21ea-61b5-4b78-b79e-9d5687d819bd.yml b/security/caldera-ot/files/patch-modbus-data-abilities-collection_001e21ea-61b5-4b78-b79e-9d5687d819bd.yml index 8a1355cd7026..6855bcb33179 100644 --- a/security/caldera-ot/files/patch-modbus-data-abilities-collection_001e21ea-61b5-4b78-b79e-9d5687d819bd.yml +++ b/security/caldera-ot/files/patch-modbus-data-abilities-collection_001e21ea-61b5-4b78-b79e-9d5687d819bd.yml @@ -1,22 +1,22 @@ --- modbus/data/abilities/collection/001e21ea-61b5-4b78-b79e-9d5687d819bd.yml 2023-10-25 17:55:53.170972000 -0500 +++ modbus/data/abilities/collection/001e21ea-61b5-4b78-b79e-9d5687d819bd.yml 2023-10-25 17:56:52.419868000 -0500 @@ -12,6 +12,12 @@ name: Point & Tag Identification repeatable: True platforms: + freebsd: + sh: + command: -+ './modbus_cli-freebsd #{modbus.all.deviceip} --port #{modbus.all.deviceport} read_di #{modbus.read_di.start} #{modbus.read_di.count}' ++ './modbus_cli_freebsd #{modbus.all.deviceip} --port #{modbus.all.deviceport} read_di #{modbus.read_di.start} #{modbus.read_di.count}' + payloads: -+ - modbus_cli-freebsd ++ - modbus_cli_freebsd linux: sh: command: @@ -23,4 +29,4 @@ command: '.\modbus_cli.exe #{modbus.all.deviceip} --port #{modbus.all.deviceport} read_di #{modbus.read_di.start} #{modbus.read_di.count}' payloads: - - modbus_cli.exe \ No newline at end of file + - modbus_cli.exe diff --git a/security/caldera-ot/files/patch-modbus-data-abilities-collection_3946b6da-c570-47cd-b63f-c13875297cb4.yml b/security/caldera-ot/files/patch-modbus-data-abilities-collection_3946b6da-c570-47cd-b63f-c13875297cb4.yml index 82d5e4f480a5..4d975a80aaad 100644 --- a/security/caldera-ot/files/patch-modbus-data-abilities-collection_3946b6da-c570-47cd-b63f-c13875297cb4.yml +++ b/security/caldera-ot/files/patch-modbus-data-abilities-collection_3946b6da-c570-47cd-b63f-c13875297cb4.yml @@ -1,22 +1,22 @@ --- modbus/data/abilities/collection/3946b6da-c570-47cd-b63f-c13875297cb4.yml 2023-10-25 17:55:59.073472000 -0500 +++ modbus/data/abilities/collection/3946b6da-c570-47cd-b63f-c13875297cb4.yml 2023-10-25 17:57:16.281999000 -0500 @@ -12,6 +12,12 @@ name: Point & Tag Identification repeatable: True platforms: + freebsd: + sh: + command: -+ './modbus_cli-freebsd #{modbus.all.deviceip} --port #{modbus.all.deviceport} read_ir #{modbus.read_ir.start} #{modbus.read_ir.count}' ++ './modbus_cli_freebsd #{modbus.all.deviceip} --port #{modbus.all.deviceport} read_ir #{modbus.read_ir.start} #{modbus.read_ir.count}' + payloads: -+ - modbus_cli-freebsd ++ - modbus_cli_freebsd linux: sh: command: @@ -23,4 +29,4 @@ command: '.\modbus_cli.exe #{modbus.all.deviceip} --port #{modbus.all.deviceport} read_ir #{modbus.read_ir.start} #{modbus.read_ir.count}' payloads: - - modbus_cli.exe \ No newline at end of file + - modbus_cli.exe diff --git a/security/caldera-ot/files/patch-modbus-data-abilities-collection_bc8961a2-7534-4b2a-bbc3-2456f58243be.yml b/security/caldera-ot/files/patch-modbus-data-abilities-collection_bc8961a2-7534-4b2a-bbc3-2456f58243be.yml index 3c188059c9ea..9547cacbc213 100644 --- a/security/caldera-ot/files/patch-modbus-data-abilities-collection_bc8961a2-7534-4b2a-bbc3-2456f58243be.yml +++ b/security/caldera-ot/files/patch-modbus-data-abilities-collection_bc8961a2-7534-4b2a-bbc3-2456f58243be.yml @@ -1,22 +1,22 @@ --- modbus/data/abilities/collection/bc8961a2-7534-4b2a-bbc3-2456f58243be.yml 2023-10-25 17:56:05.290153000 -0500 +++ modbus/data/abilities/collection/bc8961a2-7534-4b2a-bbc3-2456f58243be.yml 2023-10-25 17:57:41.726715000 -0500 @@ -12,6 +12,12 @@ name: Point & Tag Identification repeatable: True platforms: + freebsd: + sh: + command: -+ './modbus_cli-freebsd #{modbus.all.deviceip} --port #{modbus.all.deviceport} read_hr #{modbus.read_hr.start} #{modbus.read_hr.count}' ++ './modbus_cli_freebsd #{modbus.all.deviceip} --port #{modbus.all.deviceport} read_hr #{modbus.read_hr.start} #{modbus.read_hr.count}' + payloads: -+ - modbus_cli-freebsd ++ - modbus_cli_freebsd linux: sh: command: @@ -23,4 +29,4 @@ command: '.\modbus_cli.exe #{modbus.all.deviceip} --port #{modbus.all.deviceport} read_hr #{modbus.read_hr.start} #{modbus.read_hr.count}' payloads: - - modbus_cli.exe \ No newline at end of file + - modbus_cli.exe diff --git a/security/caldera-ot/files/patch-modbus-data-abilities-collection_d80b9cd5-b1d8-482a-a745-71d74f9d0885.yml b/security/caldera-ot/files/patch-modbus-data-abilities-collection_d80b9cd5-b1d8-482a-a745-71d74f9d0885.yml index 53774dac07e7..f67c72f62f9e 100644 --- a/security/caldera-ot/files/patch-modbus-data-abilities-collection_d80b9cd5-b1d8-482a-a745-71d74f9d0885.yml +++ b/security/caldera-ot/files/patch-modbus-data-abilities-collection_d80b9cd5-b1d8-482a-a745-71d74f9d0885.yml @@ -1,22 +1,22 @@ --- modbus/data/abilities/collection/d80b9cd5-b1d8-482a-a745-71d74f9d0885.yml 2023-10-25 17:56:17.950262000 -0500 +++ modbus/data/abilities/collection/d80b9cd5-b1d8-482a-a745-71d74f9d0885.yml 2023-10-25 17:58:08.150392000 -0500 @@ -12,6 +12,12 @@ name: Point & Tag Identification repeatable: True platforms: + freebsd: + sh: + command: -+ './modbus_cli-freebsd #{modbus.all.deviceip} --port #{modbus.all.deviceport} read_c #{modbus.read_c.start} #{modbus.read_c.count}' ++ './modbus_cli_freebsd #{modbus.all.deviceip} --port #{modbus.all.deviceport} read_c #{modbus.read_c.start} #{modbus.read_c.count}' + payloads: -+ - modbus_cli-freebsd ++ - modbus_cli_freebsd linux: sh: command: @@ -23,4 +29,4 @@ command: '.\modbus_cli.exe #{modbus.all.deviceip} --port #{modbus.all.deviceport} read_c #{modbus.read_c.start} #{modbus.read_c.count}' payloads: - - modbus_cli.exe \ No newline at end of file + - modbus_cli.exe diff --git a/security/caldera-ot/files/patch-modbus-data-abilities-impact_056e6289-4cbf-417f-928a-d75125e4db4f.yml b/security/caldera-ot/files/patch-modbus-data-abilities-impact_056e6289-4cbf-417f-928a-d75125e4db4f.yml index 513df5f3c7b6..26d3871201be 100644 --- a/security/caldera-ot/files/patch-modbus-data-abilities-impact_056e6289-4cbf-417f-928a-d75125e4db4f.yml +++ b/security/caldera-ot/files/patch-modbus-data-abilities-impact_056e6289-4cbf-417f-928a-d75125e4db4f.yml @@ -1,22 +1,22 @@ --- modbus/data/abilities/impact/056e6289-4cbf-417f-928a-d75125e4db4f.yml 2023-10-25 17:58:18.590805000 -0500 +++ modbus/data/abilities/impact/056e6289-4cbf-417f-928a-d75125e4db4f.yml 2023-10-25 17:59:11.454596000 -0500 @@ -12,6 +12,12 @@ name: Manipulation of Control repeatable: true platforms: + freebsd: + sh: + command: -+ './modbus_cli-freebsd #{modbus.all.deviceip} --port #{modbus.all.deviceport} write_c #{modbus.write_c.start} #{modbus.write_c.value}' ++ './modbus_cli_freebsd #{modbus.all.deviceip} --port #{modbus.all.deviceport} write_c #{modbus.write_c.start} #{modbus.write_c.value}' + payloads: -+ - modbus_cli-freebsd ++ - modbus_cli_freebsd linux: sh: command: @@ -23,4 +29,4 @@ command: '.\modbus_cli.exe #{modbus.all.deviceip} --port #{modbus.all.deviceport} write_c #{modbus.write_c.start} #{modbus.write_c.value}' payloads: - - modbus_cli.exe \ No newline at end of file + - modbus_cli.exe diff --git a/security/caldera-ot/files/patch-modbus-data-abilities-impact_0f16b341-9730-4553-b6d6-8eb8def02c81.yml b/security/caldera-ot/files/patch-modbus-data-abilities-impact_0f16b341-9730-4553-b6d6-8eb8def02c81.yml index fda2f8fb2761..81af733763d2 100644 --- a/security/caldera-ot/files/patch-modbus-data-abilities-impact_0f16b341-9730-4553-b6d6-8eb8def02c81.yml +++ b/security/caldera-ot/files/patch-modbus-data-abilities-impact_0f16b341-9730-4553-b6d6-8eb8def02c81.yml @@ -1,22 +1,22 @@ --- modbus/data/abilities/impact/0f16b341-9730-4553-b6d6-8eb8def02c81.yml 2023-10-25 17:58:23.307634000 -0500 +++ modbus/data/abilities/impact/0f16b341-9730-4553-b6d6-8eb8def02c81.yml 2023-10-25 17:59:48.668864000 -0500 @@ -12,6 +12,12 @@ name: Manipulation of Control repeatable: True platforms: + freebsd: + sh: + command: -+ './modbus_cli-freebsd #{modbus.all.deviceip} --port #{modbus.all.deviceport} write_multi_r #{modbus.write_multi_r.start} #{modbus.write_multi_r.value} #{modbus.write_multi_r.count}' ++ './modbus_cli_freebsd #{modbus.all.deviceip} --port #{modbus.all.deviceport} write_multi_r #{modbus.write_multi_r.start} #{modbus.write_multi_r.value} #{modbus.write_multi_r.count}' + payloads: -+ - modbus_cli-freebsd ++ - modbus_cli_freebsd linux: sh: command: @@ -23,4 +29,4 @@ command: '.\modbus_cli.exe #{modbus.all.deviceip} --port #{modbus.all.deviceport} write_multi_r #{modbus.write_multi_r.start} #{modbus.write_multi_r.value} #{modbus.write_multi_r.count}' payloads: - - modbus_cli.exe \ No newline at end of file + - modbus_cli.exe diff --git a/security/caldera-ot/files/patch-modbus-data-abilities-impact_2a6e8c8e-f350-11ed-9156-23436b8f0e58.yml b/security/caldera-ot/files/patch-modbus-data-abilities-impact_2a6e8c8e-f350-11ed-9156-23436b8f0e58.yml index e3782766543b..44cff4b49b60 100644 --- a/security/caldera-ot/files/patch-modbus-data-abilities-impact_2a6e8c8e-f350-11ed-9156-23436b8f0e58.yml +++ b/security/caldera-ot/files/patch-modbus-data-abilities-impact_2a6e8c8e-f350-11ed-9156-23436b8f0e58.yml @@ -1,22 +1,22 @@ --- modbus/data/abilities/impact/2a6e8c8e-f350-11ed-9156-23436b8f0e58.yml 2023-10-25 17:58:29.045645000 -0500 +++ modbus/data/abilities/impact/2a6e8c8e-f350-11ed-9156-23436b8f0e58.yml 2023-10-25 18:00:22.668282000 -0500 @@ -13,6 +13,12 @@ name: Manipulation of Control repeatable: True platforms: + freebsd: + sh: + command: -+ './modbus_cli-freebsd #{modbus.all.deviceip} --port #{modbus.all.deviceport} fuzz_r #{modbus.fuzzreg.start} #{modbus.fuzzreg.end} #{modbus.fuzzreg.count} --min #{modbus.fuzzreg.min} --max #{modbus.fuzzreg.max} --wait #{modbus.fuzzreg.wait}' ++ './modbus_cli_freebsd #{modbus.all.deviceip} --port #{modbus.all.deviceport} fuzz_r #{modbus.fuzzreg.start} #{modbus.fuzzreg.end} #{modbus.fuzzreg.count} --min #{modbus.fuzzreg.min} --max #{modbus.fuzzreg.max} --wait #{modbus.fuzzreg.wait}' + payloads: -+ - modbus_cli-freebsd ++ - modbus_cli_freebsd linux: sh: command: @@ -24,4 +30,4 @@ command: '.\modbus_cli.exe #{modbus.all.deviceip} --port #{modbus.all.deviceport} fuzz_r #{modbus.fuzzreg.start} #{modbus.fuzzreg.end} #{modbus.fuzzreg.count} --min #{modbus.fuzzreg.min} --max #{modbus.fuzzreg.max} --wait #{modbus.fuzzreg.wait}' payloads: - - modbus_cli.exe \ No newline at end of file + - modbus_cli.exe diff --git a/security/caldera-ot/files/patch-modbus-data-abilities-impact_40f78a8f-2aaa-4b1b-872f-7c6b0f1ddf3e.yml b/security/caldera-ot/files/patch-modbus-data-abilities-impact_40f78a8f-2aaa-4b1b-872f-7c6b0f1ddf3e.yml index cf02689d28c4..535329c6ea44 100644 --- a/security/caldera-ot/files/patch-modbus-data-abilities-impact_40f78a8f-2aaa-4b1b-872f-7c6b0f1ddf3e.yml +++ b/security/caldera-ot/files/patch-modbus-data-abilities-impact_40f78a8f-2aaa-4b1b-872f-7c6b0f1ddf3e.yml @@ -1,22 +1,22 @@ --- modbus/data/abilities/impact/40f78a8f-2aaa-4b1b-872f-7c6b0f1ddf3e.yml 2023-10-25 17:58:36.482653000 -0500 +++ modbus/data/abilities/impact/40f78a8f-2aaa-4b1b-872f-7c6b0f1ddf3e.yml 2023-10-25 18:00:59.579356000 -0500 @@ -13,6 +13,12 @@ name: Manipulation of Control repeatable: True platforms: + freebsd: + sh: + command: -+ './modbus_cli-freebsd #{modbus.all.deviceip} --port #{modbus.all.deviceport} fuzz_c #{modbus.fuzzcoil.start} #{modbus.fuzzcoil.end} #{modbus.fuzzcoil.count} --wait #{modbus.fuzzcoil.wait}' ++ './modbus_cli_freebsd #{modbus.all.deviceip} --port #{modbus.all.deviceport} fuzz_c #{modbus.fuzzcoil.start} #{modbus.fuzzcoil.end} #{modbus.fuzzcoil.count} --wait #{modbus.fuzzcoil.wait}' + payloads: -+ - modbus_cli-freebsd ++ - modbus_cli_freebsd linux: sh: command: @@ -24,4 +30,4 @@ command: '.\modbus_cli.exe #{modbus.all.deviceip} --port #{modbus.all.deviceport} fuzz_c #{modbus.fuzzcoil.start} #{modbus.fuzzcoil.end} #{modbus.fuzzcoil.count} --wait #{modbus.fuzzcoil.wait}' payloads: - - modbus_cli.exe \ No newline at end of file + - modbus_cli.exe diff --git a/security/caldera-ot/files/patch-modbus-data-abilities-impact_d6991b6b-d3b2-4398-ad3f-d736ae09acf9.yml b/security/caldera-ot/files/patch-modbus-data-abilities-impact_d6991b6b-d3b2-4398-ad3f-d736ae09acf9.yml index 591bf61d499b..14d9a884f400 100644 --- a/security/caldera-ot/files/patch-modbus-data-abilities-impact_d6991b6b-d3b2-4398-ad3f-d736ae09acf9.yml +++ b/security/caldera-ot/files/patch-modbus-data-abilities-impact_d6991b6b-d3b2-4398-ad3f-d736ae09acf9.yml @@ -1,22 +1,22 @@ --- modbus/data/abilities/impact/d6991b6b-d3b2-4398-ad3f-d736ae09acf9.yml 2023-10-25 17:58:41.923095000 -0500 +++ modbus/data/abilities/impact/d6991b6b-d3b2-4398-ad3f-d736ae09acf9.yml 2023-10-25 18:01:23.478626000 -0500 @@ -12,6 +12,12 @@ name: Manipulation of Control repeatable: true platforms: + freebsd: + sh: + command: -+ './modbus_cli-freebsd #{modbus.all.deviceip} --port #{modbus.all.deviceport} write_r #{modbus.write_r.start} #{modbus.write_r.value}' ++ './modbus_cli_freebsd #{modbus.all.deviceip} --port #{modbus.all.deviceport} write_r #{modbus.write_r.start} #{modbus.write_r.value}' + payloads: -+ - modbus_cli-freebsd ++ - modbus_cli_freebsd linux: sh: command: @@ -23,4 +29,4 @@ command: '.\modbus_cli.exe #{modbus.all.deviceip} --port #{modbus.all.deviceport} write_r #{modbus.write_r.start} #{modbus.write_r.value}' payloads: - - modbus_cli.exe \ No newline at end of file + - modbus_cli.exe diff --git a/security/caldera-ot/files/patch-modbus-data-abilities-impact_fe321da2-e183-44a3-b423-b8cba9a8bda0.yml b/security/caldera-ot/files/patch-modbus-data-abilities-impact_fe321da2-e183-44a3-b423-b8cba9a8bda0.yml index c0a9f140d4fc..bc4a6ce3191e 100644 --- a/security/caldera-ot/files/patch-modbus-data-abilities-impact_fe321da2-e183-44a3-b423-b8cba9a8bda0.yml +++ b/security/caldera-ot/files/patch-modbus-data-abilities-impact_fe321da2-e183-44a3-b423-b8cba9a8bda0.yml @@ -1,22 +1,22 @@ --- modbus/data/abilities/impact/fe321da2-e183-44a3-b423-b8cba9a8bda0.yml 2023-10-25 17:58:47.295322000 -0500 +++ modbus/data/abilities/impact/fe321da2-e183-44a3-b423-b8cba9a8bda0.yml 2023-10-25 18:01:58.004852000 -0500 @@ -12,6 +12,12 @@ name: Manipulation of Control repeatable: True platforms: + freebsd: + sh: + command: -+ './modbus_cli-freebsd #{modbus.all.deviceip} --port #{modbus.all.deviceport} write_multi_c #{modbus.write_multi_c.start} #{modbus.write_multi_c.value} #{modbus.write_multi_c.count}' ++ './modbus_cli_freebsd #{modbus.all.deviceip} --port #{modbus.all.deviceport} write_multi_c #{modbus.write_multi_c.start} #{modbus.write_multi_c.value} #{modbus.write_multi_c.count}' + payloads: -+ - modbus_cli-freebsd ++ - modbus_cli_freebsd linux: sh: command: @@ -23,4 +29,4 @@ command: '.\modbus_cli.exe #{modbus.all.deviceip} --port #{modbus.all.deviceport} write_multi_c #{modbus.write_multi_c.start} #{modbus.write_multi_c.value} #{modbus.write_multi_c.count}' payloads: - - modbus_cli.exe \ No newline at end of file + - modbus_cli.exe diff --git a/security/caldera-ot/files/patch-modbus-payloads_58aaab96-7191-4978-acec-a3b1deb03332.yml b/security/caldera-ot/files/patch-modbus-payloads_58aaab96-7191-4978-acec-a3b1deb03332.yml index 0cb9891b1cb0..2e684dcc4e10 100644 --- a/security/caldera-ot/files/patch-modbus-payloads_58aaab96-7191-4978-acec-a3b1deb03332.yml +++ b/security/caldera-ot/files/patch-modbus-payloads_58aaab96-7191-4978-acec-a3b1deb03332.yml @@ -1,12 +1,12 @@ --- modbus/payloads/58aaab96-7191-4978-acec-a3b1deb03332.yml 2023-10-25 18:08:58.237967000 -0500 +++ modbus/payloads/58aaab96-7191-4978-acec-a3b1deb03332.yml 2023-10-25 18:09:40.129650000 -0500 @@ -3,6 +3,9 @@ id: 58aaab96-7191-4978-acec-a3b1deb03332 name: Modbus Payloads standard_payloads: -+ modbus_cli-freebsd: ++ modbus_cli_freebsd: + description: Modbus Client program (FreeBSD) + id: 6f914083-738b-11ee-9734-8851fb56e3b2 modbus_cli: description: Modbus Client program (Linux) id: 090b9e5d-257e-4af5-a3ac-af1f6f5b1c10 diff --git a/security/caldera-ot/files/patch-profinet_data_abilities_discovery_35e384c3-2c27-4cf6-8155-70b2cf4b6cef.yml b/security/caldera-ot/files/patch-profinet_data_abilities_discovery_35e384c3-2c27-4cf6-8155-70b2cf4b6cef.yml new file mode 100644 index 000000000000..846840661c41 --- /dev/null +++ b/security/caldera-ot/files/patch-profinet_data_abilities_discovery_35e384c3-2c27-4cf6-8155-70b2cf4b6cef.yml @@ -0,0 +1,22 @@ +--- profinet/data/abilities/discovery/35e384c3-2c27-4cf6-8155-70b2cf4b6cef.yml.orig 2024-02-18 23:08:41 UTC ++++ profinet/data/abilities/discovery/35e384c3-2c27-4cf6-8155-70b2cf4b6cef.yml +@@ -20,10 +20,17 @@ + ./dcp_utility get_name #{dcp.target.mac} + payloads: + - dcp_utility ++ freebsd: ++ sh: ++ timeout: 360 ++ command: | ++ ./dcp_utility_freebsd get_name #{dcp.target.mac} ++ payloads: ++ - dcp_utility_freebsd + windows: + psh, cmd: + timeout: 360 + command: | + .\dcp_utility.exe get_name #{dcp.target.mac} + payloads: +- - dcp_utility.exe +\ No newline at end of file ++ - dcp_utility.exe diff --git a/security/caldera-ot/files/patch-profinet_data_abilities_discovery_36284e7a-012f-4d9d-b803-0d435e06bbf6.yml b/security/caldera-ot/files/patch-profinet_data_abilities_discovery_36284e7a-012f-4d9d-b803-0d435e06bbf6.yml new file mode 100644 index 000000000000..0bf97e8b7264 --- /dev/null +++ b/security/caldera-ot/files/patch-profinet_data_abilities_discovery_36284e7a-012f-4d9d-b803-0d435e06bbf6.yml @@ -0,0 +1,16 @@ +--- profinet/data/abilities/discovery/36284e7a-012f-4d9d-b803-0d435e06bbf6.yml.orig 2024-02-18 23:08:41 UTC ++++ profinet/data/abilities/discovery/36284e7a-012f-4d9d-b803-0d435e06bbf6.yml +@@ -20,6 +20,13 @@ + ./dcp_utility get_ip #{dcp.target.mac} + payloads: + - dcp_utility ++ freebsd: ++ sh: ++ timeout: 360 ++ command: | ++ ./dcp_utility_freebsd get_ip #{dcp.target.mac} ++ payloads: ++ - dcp_utility_freebsd + windows: + psh, cmd: + timeout: 360 diff --git a/security/caldera-ot/files/patch-profinet_data_abilities_discovery_bb7e8e63-690f-4b29-9a2e-36fc3e0aa152.yml b/security/caldera-ot/files/patch-profinet_data_abilities_discovery_bb7e8e63-690f-4b29-9a2e-36fc3e0aa152.yml new file mode 100644 index 000000000000..b3ded8ddf5c3 --- /dev/null +++ b/security/caldera-ot/files/patch-profinet_data_abilities_discovery_bb7e8e63-690f-4b29-9a2e-36fc3e0aa152.yml @@ -0,0 +1,16 @@ +--- profinet/data/abilities/discovery/bb7e8e63-690f-4b29-9a2e-36fc3e0aa152.yml.orig 2024-02-18 23:08:41 UTC ++++ profinet/data/abilities/discovery/bb7e8e63-690f-4b29-9a2e-36fc3e0aa152.yml +@@ -20,6 +20,13 @@ + ./dcp_utility id_one #{dcp.target.mac} + payloads: + - dcp_utility ++ freebsd: ++ sh: ++ timeout: 360 ++ command: | ++ ./dcp_utility_freebsd id_one #{dcp.target.mac} ++ payloads: ++ - dcp_utility_freebsd + windows: + psh, cmd: + timeout: 360 diff --git a/security/caldera-ot/files/patch-profinet_data_abilities_discovery_df68ded9-4fa1-4d6c-a7d3-558c3ddd808a.yml b/security/caldera-ot/files/patch-profinet_data_abilities_discovery_df68ded9-4fa1-4d6c-a7d3-558c3ddd808a.yml new file mode 100644 index 000000000000..8a87d0804809 --- /dev/null +++ b/security/caldera-ot/files/patch-profinet_data_abilities_discovery_df68ded9-4fa1-4d6c-a7d3-558c3ddd808a.yml @@ -0,0 +1,22 @@ +--- profinet/data/abilities/discovery/df68ded9-4fa1-4d6c-a7d3-558c3ddd808a.yml.orig 2024-02-18 23:08:41 UTC ++++ profinet/data/abilities/discovery/df68ded9-4fa1-4d6c-a7d3-558c3ddd808a.yml +@@ -20,10 +20,17 @@ + ./dcp_utility id_all + payloads: + - dcp_utility ++ freebsd: ++ sh: ++ timeout: 360 ++ command: | ++ ./dcp_utility_freebsd id_all ++ payloads: ++ - dcp_utility_freebsd + windows: + psh, cmd: + timeout: 360 + command: | + .\dcp_utility.exe id_all + payloads: +- - dcp_utility.exe +\ No newline at end of file ++ - dcp_utility.exe diff --git a/security/caldera-ot/files/patch-profinet_data_abilities_impair-process-control_132898e3-c2cc-4af4-954f-06ac99566a8f.yml b/security/caldera-ot/files/patch-profinet_data_abilities_impair-process-control_132898e3-c2cc-4af4-954f-06ac99566a8f.yml new file mode 100644 index 000000000000..e49d11204e80 --- /dev/null +++ b/security/caldera-ot/files/patch-profinet_data_abilities_impair-process-control_132898e3-c2cc-4af4-954f-06ac99566a8f.yml @@ -0,0 +1,22 @@ +--- profinet/data/abilities/impair-process-control/132898e3-c2cc-4af4-954f-06ac99566a8f.yml.orig 2024-02-18 23:10:18 UTC ++++ profinet/data/abilities/impair-process-control/132898e3-c2cc-4af4-954f-06ac99566a8f.yml +@@ -20,10 +20,17 @@ + ./dcp_utility set_ip #{dcp.target.mac} #{dcp.target.ip} #{dcp.target.subnetmask} #{dcp.target.gateway} + payloads: + - dcp_utility ++ freebsd: ++ sh: ++ timeout: 360 ++ command: | ++ ./dcp_utility_freebsd set_ip #{dcp.target.mac} #{dcp.target.ip} #{dcp.target.subnetmask} #{dcp.target.gateway} ++ payloads: ++ - dcp_utility_freebsd + windows: + psh, cmd: + timeout: 360 + command: | + .\dcp_utility.exe set_ip #{dcp.target.mac} #{dcp.target.ip} #{dcp.target.subnetmask} #{dcp.target.gateway} + payloads: +- - dcp_utility.exe +\ No newline at end of file ++ - dcp_utility.exe diff --git a/security/caldera-ot/files/patch-profinet_data_abilities_impair-process-control_23b5c9f5-3a52-4b01-81bd-6f3fa570d57e.yml b/security/caldera-ot/files/patch-profinet_data_abilities_impair-process-control_23b5c9f5-3a52-4b01-81bd-6f3fa570d57e.yml new file mode 100644 index 000000000000..76c8fbb664f7 --- /dev/null +++ b/security/caldera-ot/files/patch-profinet_data_abilities_impair-process-control_23b5c9f5-3a52-4b01-81bd-6f3fa570d57e.yml @@ -0,0 +1,22 @@ +--- profinet/data/abilities/impair-process-control/23b5c9f5-3a52-4b01-81bd-6f3fa570d57e.yml.orig 2024-02-18 23:10:18 UTC ++++ profinet/data/abilities/impair-process-control/23b5c9f5-3a52-4b01-81bd-6f3fa570d57e.yml +@@ -20,10 +20,17 @@ + ./dcp_utility set_name #{dcp.target.mac} #{dcp.target.name} + payloads: + - dcp_utility ++ freebsd: ++ sh: ++ timeout: 360 ++ command: | ++ ./dcp_utility_freebsd set_name #{dcp.target.mac} #{dcp.target.name} ++ payloads: ++ - dcp_utility_freebsd + windows: + psh, cmd: + timeout: 360 + command: | + .\dcp_utility.exe set_name #{dcp.target.mac} #{dcp.target.name} + payloads: +- - dcp_utility.exe +\ No newline at end of file ++ - dcp_utility.exe diff --git a/security/caldera-ot/files/patch-profinet_data_abilities_impair-process-control_b885e6f4-18c2-455b-9695-6eec76d545ca.yml b/security/caldera-ot/files/patch-profinet_data_abilities_impair-process-control_b885e6f4-18c2-455b-9695-6eec76d545ca.yml new file mode 100644 index 000000000000..68fb316b599b --- /dev/null +++ b/security/caldera-ot/files/patch-profinet_data_abilities_impair-process-control_b885e6f4-18c2-455b-9695-6eec76d545ca.yml @@ -0,0 +1,22 @@ +--- profinet/data/abilities/impair-process-control/b885e6f4-18c2-455b-9695-6eec76d545ca.yml.orig 2024-02-18 23:10:18 UTC ++++ profinet/data/abilities/impair-process-control/b885e6f4-18c2-455b-9695-6eec76d545ca.yml +@@ -20,10 +20,17 @@ + ./dcp_utility blink #{dcp.target.mac} + payloads: + - dcp_utility ++ freebsd: ++ sh: ++ timeout: 360 ++ command: | ++ ./dcp_utility_freebsd blink #{dcp.target.mac} ++ payloads: ++ - dcp_utility_freebsd + windows: + psh, cmd: + timeout: 360 + command: | + .\dcp_utility.exe blink #{dcp.target.mac} + payloads: +- - dcp_utility.exe +\ No newline at end of file ++ - dcp_utility.exe diff --git a/security/caldera-ot/files/patch-profinet_payloads_6c2308e7-852b-49c5-a6a4-1ac8622b6669.yml b/security/caldera-ot/files/patch-profinet_payloads_6c2308e7-852b-49c5-a6a4-1ac8622b6669.yml new file mode 100644 index 000000000000..62eec905ad9c --- /dev/null +++ b/security/caldera-ot/files/patch-profinet_payloads_6c2308e7-852b-49c5-a6a4-1ac8622b6669.yml @@ -0,0 +1,14 @@ +--- profinet/payloads/6c2308e7-852b-49c5-a6a4-1ac8622b6669.yml.orig 2024-02-18 23:07:32 UTC ++++ profinet/payloads/6c2308e7-852b-49c5-a6a4-1ac8622b6669.yml +@@ -6,6 +6,9 @@ standard_payloads: + dcp_utility: + description: DCP Utility (Linux) + id: be472e7e-bdb8-4ccc-9481-c15ef5cbd363 ++ dcp_utility_freebsd: ++ description: DCP Utility (FreeBSD) ++ id: 8ee3cbc7-ceb2-11ee-a38f-8851fb56e3b2 + dcp_utility.exe: + description: DCP Utility (Windows) +- id: 77ec6492-4670-4508-af56-af660028c3ae +\ No newline at end of file ++ id: 77ec6492-4670-4508-af56-af660028c3ae diff --git a/security/caldera-ot/files/pkg-message.in b/security/caldera-ot/files/pkg-message.in index d6bee52614d8..53f6519d89b3 100644 --- a/security/caldera-ot/files/pkg-message.in +++ b/security/caldera-ot/files/pkg-message.in @@ -1,18 +1,18 @@ [ { type: install message: <