Add detection patterns for latest actively exploited vulnerabilities: - CVE-2025-55182 (React2Shell, CVSS 10.0) - CVE-2025-8110 (Gogs RCE), CVE-2025-53770 (SharePoint) - CVE-2025-52691 (SmarterMail), CVE-2025-40551 (SolarWinds) - CVE-2024-47575 (FortiManager), CVE-2024-21887 (Ivanti) - CVE-2024-3400, CVE-2024-0012, CVE-2024-9474 (PAN-OS) New attack categories based on OWASP Top 10 2025: - HTTP Request Smuggling (TE.CL/CL.TE conflicts) - AI/LLM Prompt Injection (ChatML, instruction markers) - WAF Bypass techniques (Unicode normalization, double encoding) - Supply Chain attacks (CI/CD poisoning, dependency confusion) - Extended SSTI (Jinja2, Freemarker, Velocity, Thymeleaf) - API Abuse (BOLA/IDOR, mass assignment) CrowdSec scenarios split into 11 separate files for reliability. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
119 lines
3.7 KiB
JavaScript
119 lines
3.7 KiB
JavaScript
'use strict';
|
||
'require view';
|
||
'require secubox-theme/theme as Theme';
|
||
'require system-hub/theme-assets as ThemeAssets';
|
||
'require system-hub/dev-status-widget as DevStatusWidget';
|
||
'require system-hub/nav as HubNav';
|
||
'require secubox-portal/header as SbHeader';
|
||
'require secubox/kiss-theme';
|
||
|
||
return view.extend({
|
||
widget: null,
|
||
|
||
load: function() {
|
||
var shLang = (typeof L !== 'undefined' && L.env && L.env.lang) ||
|
||
(document.documentElement && document.documentElement.getAttribute('lang')) ||
|
||
(navigator.language ? navigator.language.split('-')[0] : 'en');
|
||
return Theme.init({ language: shLang });
|
||
},
|
||
|
||
getWidget: function() {
|
||
if (!this.widget)
|
||
this.widget = DevStatusWidget;
|
||
return this.widget;
|
||
},
|
||
|
||
render: function() {
|
||
var widget = this.getWidget();
|
||
|
||
var content = [
|
||
E('link', { 'rel': 'stylesheet', 'href': L.resource('secubox-theme/secubox-theme.css') }),
|
||
ThemeAssets.stylesheet('common.css'),
|
||
ThemeAssets.stylesheet('dashboard.css'),
|
||
HubNav.renderTabs('dev-status'),
|
||
this.renderHeader(),
|
||
this.renderSummaryGrid(),
|
||
E('div', { 'class': 'sh-dev-status-widget-shell' }, [
|
||
E('div', { 'id': 'dev-status-widget' })
|
||
]),
|
||
this.renderFooterNote(),
|
||
E('style', {
|
||
'type': 'text/css'
|
||
}, `
|
||
.sh-dev-status-widget-shell .dsw-milestones,
|
||
.sh-dev-status-widget-shell .dsw-timeline,
|
||
.sh-dev-status-widget-shell .dsw-stats {
|
||
display: none !important;
|
||
}
|
||
.sh-dev-status-widget-shell .dsw-modules {
|
||
margin-top: -10px;
|
||
}
|
||
`)
|
||
];
|
||
|
||
window.requestAnimationFrame(function() {
|
||
widget.render('dev-status-widget');
|
||
});
|
||
|
||
return KissTheme.wrap(content, 'admin/system/hub/dev-status');
|
||
},
|
||
|
||
renderHeader: function() {
|
||
var widget = this.getWidget();
|
||
var currentPhase = widget.getCurrentPhase();
|
||
|
||
return E('div', { 'class': 'sh-page-header' }, [
|
||
E('div', {}, [
|
||
E('h2', { 'class': 'sh-page-title' }, [
|
||
E('span', { 'class': 'sh-page-title-icon' }, '🚀'),
|
||
'Development Status'
|
||
]),
|
||
E('p', { 'class': 'sh-page-subtitle' },
|
||
'SecuBox + System Hub version monitor (v' + widget.targetVersion + ' target)')
|
||
]),
|
||
E('div', { 'class': 'sh-page-insight' }, [
|
||
E('div', { 'class': 'sh-page-insight-label' }, 'Current phase'),
|
||
E('div', { 'class': 'sh-page-insight-value' },
|
||
currentPhase.phase + ' · ' + currentPhase.name),
|
||
E('div', { 'class': 'sh-page-insight-sub' }, currentPhase.period)
|
||
])
|
||
]);
|
||
},
|
||
|
||
renderSummaryGrid: function() {
|
||
var widget = this.getWidget();
|
||
var overallProgress = widget.getOverallProgress();
|
||
var phase = widget.getCurrentPhase();
|
||
var milestonesCount = Object.keys(widget.milestones || {}).length;
|
||
|
||
return E('div', { 'class': 'sh-stats-grid sh-dev-status-grid' }, [
|
||
E('div', { 'class': 'sh-stat-badge' }, [
|
||
E('div', { 'class': 'sh-stat-value', 'style': 'color:#10b981;' }, overallProgress + '%'),
|
||
E('div', { 'class': 'sh-stat-label' }, 'Global progress')
|
||
]),
|
||
E('div', { 'class': 'sh-stat-badge' }, [
|
||
E('div', { 'class': 'sh-stat-value' }, milestonesCount),
|
||
E('div', { 'class': 'sh-stat-label' }, 'Milestone groups')
|
||
]),
|
||
E('div', { 'class': 'sh-stat-badge' }, [
|
||
E('div', { 'class': 'sh-stat-value' }, widget.stats.modulesCount),
|
||
E('div', { 'class': 'sh-stat-label' }, 'Modules livrés')
|
||
]),
|
||
E('div', { 'class': 'sh-stat-badge' }, [
|
||
E('div', { 'class': 'sh-stat-value' }, (phase.status || '').replace('-', ' ')),
|
||
E('div', { 'class': 'sh-stat-label' }, 'Phase status')
|
||
])
|
||
]);
|
||
},
|
||
|
||
renderFooterNote: function() {
|
||
return E('div', {
|
||
'class': 'sh-dev-status-note'
|
||
}, [
|
||
E('strong', {}, 'ℹ️ Transparence SecuBox'),
|
||
E('span', {},
|
||
' Données synchronisées avec la page demo-dev-status du site public pour partager l\'avancement avec la communauté.')
|
||
]);
|
||
}
|
||
});
|