mcp-wordpress 2.1.0 → 2.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. package/dist/security/AISecurityScanner.d.ts +175 -0
  2. package/dist/security/AISecurityScanner.d.ts.map +1 -0
  3. package/dist/security/AISecurityScanner.js +645 -0
  4. package/dist/security/AISecurityScanner.js.map +1 -0
  5. package/dist/security/AutomatedRemediation.d.ts +145 -0
  6. package/dist/security/AutomatedRemediation.d.ts.map +1 -0
  7. package/dist/security/AutomatedRemediation.js +535 -0
  8. package/dist/security/AutomatedRemediation.js.map +1 -0
  9. package/dist/security/SecurityCIPipeline.d.ts +213 -0
  10. package/dist/security/SecurityCIPipeline.d.ts.map +1 -0
  11. package/dist/security/SecurityCIPipeline.js +684 -0
  12. package/dist/security/SecurityCIPipeline.js.map +1 -0
  13. package/dist/security/SecurityConfigManager.d.ts +294 -0
  14. package/dist/security/SecurityConfigManager.d.ts.map +1 -0
  15. package/dist/security/SecurityConfigManager.js +553 -0
  16. package/dist/security/SecurityConfigManager.js.map +1 -0
  17. package/dist/security/SecurityMonitoring.d.ts +245 -0
  18. package/dist/security/SecurityMonitoring.d.ts.map +1 -0
  19. package/dist/security/SecurityMonitoring.js +596 -0
  20. package/dist/security/SecurityMonitoring.js.map +1 -0
  21. package/dist/security/SecurityReviewer.d.ts +168 -0
  22. package/dist/security/SecurityReviewer.d.ts.map +1 -0
  23. package/dist/security/SecurityReviewer.js +683 -0
  24. package/dist/security/SecurityReviewer.js.map +1 -0
  25. package/dist/security/index.d.ts +182 -0
  26. package/dist/security/index.d.ts.map +1 -0
  27. package/dist/security/index.js +189 -0
  28. package/dist/security/index.js.map +1 -0
  29. package/package.json +8 -3
  30. package/src/security/AISecurityScanner.ts +780 -0
  31. package/src/security/AutomatedRemediation.ts +665 -0
  32. package/src/security/SecurityCIPipeline.ts +969 -0
  33. package/src/security/SecurityConfigManager.ts +829 -0
  34. package/src/security/SecurityMonitoring.ts +841 -0
  35. package/src/security/SecurityReviewer.ts +855 -0
  36. package/src/security/index.ts +249 -0
@@ -0,0 +1,596 @@
1
+ /**
2
+ * Security Monitoring and Alerting System
3
+ * Provides real-time security monitoring, threat detection, and incident response
4
+ */
5
+ import { EventEmitter } from "events";
6
+ import { SecurityUtils } from "./SecurityConfig";
7
+ /**
8
+ * Real-time Security Monitor
9
+ */
10
+ export class SecurityMonitor extends EventEmitter {
11
+ events = [];
12
+ alerts = [];
13
+ threatIntel = new Map();
14
+ anomalyPatterns = [];
15
+ metrics = [];
16
+ isMonitoring = false;
17
+ metricsInterval;
18
+ constructor() {
19
+ super();
20
+ this.initializeAnomalyPatterns();
21
+ }
22
+ /**
23
+ * Start security monitoring
24
+ */
25
+ start() {
26
+ if (this.isMonitoring) {
27
+ console.warn("[Security Monitor] Already monitoring");
28
+ return;
29
+ }
30
+ this.isMonitoring = true;
31
+ console.log("[Security Monitor] Starting security monitoring");
32
+ // Start metrics collection
33
+ this.metricsInterval = setInterval(() => {
34
+ this.collectMetrics();
35
+ }, 60000); // Every minute
36
+ this.emit("monitoring-started");
37
+ }
38
+ /**
39
+ * Stop security monitoring
40
+ */
41
+ stop() {
42
+ if (!this.isMonitoring) {
43
+ console.warn("[Security Monitor] Not currently monitoring");
44
+ return;
45
+ }
46
+ this.isMonitoring = false;
47
+ if (this.metricsInterval) {
48
+ clearInterval(this.metricsInterval);
49
+ this.metricsInterval = undefined;
50
+ }
51
+ console.log("[Security Monitor] Stopped security monitoring");
52
+ this.emit("monitoring-stopped");
53
+ }
54
+ /**
55
+ * Log security event
56
+ */
57
+ async logSecurityEvent(eventData) {
58
+ const event = {
59
+ ...eventData,
60
+ id: SecurityUtils.generateSecureToken(16),
61
+ timestamp: new Date(),
62
+ handled: false,
63
+ actions: [],
64
+ };
65
+ this.events.push(event);
66
+ // Process event in real-time
67
+ await this.processSecurityEvent(event);
68
+ // Check for anomalies
69
+ await this.checkForAnomalies(event);
70
+ // Emit event for real-time processing
71
+ this.emit("security-event", event);
72
+ console.log(`[Security Monitor] Logged ${event.severity} event: ${event.type} - ${event.description}`);
73
+ return event;
74
+ }
75
+ /**
76
+ * Process security event and take automated actions
77
+ */
78
+ async processSecurityEvent(event) {
79
+ const actions = [];
80
+ // High-severity events get immediate attention
81
+ if (event.severity === "critical" || event.severity === "high") {
82
+ actions.push(await this.createAction("alert", event, true));
83
+ if (event.type === "authentication" && event.details.ipAddress) {
84
+ // Consider blocking suspicious IPs
85
+ const suspiciousActivity = await this.checkSuspiciousActivity(event.details.ipAddress);
86
+ if (suspiciousActivity) {
87
+ actions.push(await this.createAction("block", event, true));
88
+ }
89
+ }
90
+ }
91
+ // Rate limiting for authentication events
92
+ if (event.type === "authentication" && event.details.userId) {
93
+ const failedAttempts = await this.getFailedAuthAttempts(event.details.userId);
94
+ if (failedAttempts > 5) {
95
+ actions.push(await this.createAction("throttle", event, true));
96
+ }
97
+ }
98
+ // Check against threat intelligence
99
+ if (event.details.ipAddress) {
100
+ const threat = this.threatIntel.get(event.details.ipAddress);
101
+ if (threat) {
102
+ actions.push(await this.createAction("block", event, true));
103
+ actions.push(await this.createAction("alert", event, true));
104
+ }
105
+ }
106
+ event.actions = actions;
107
+ event.handled = actions.length > 0;
108
+ // Create alert if necessary
109
+ if (event.severity === "critical" || (event.severity === "high" && event.riskScore > 7)) {
110
+ await this.createAlert(event);
111
+ }
112
+ }
113
+ /**
114
+ * Create security action
115
+ */
116
+ async createAction(type, event, automated) {
117
+ const action = {
118
+ id: SecurityUtils.generateSecureToken(12),
119
+ type,
120
+ timestamp: new Date(),
121
+ automated,
122
+ result: "pending",
123
+ details: `${type} action triggered for ${event.type} event`,
124
+ };
125
+ try {
126
+ // Execute the action
127
+ switch (type) {
128
+ case "block":
129
+ await this.executeBlockAction(event);
130
+ break;
131
+ case "throttle":
132
+ await this.executeThrottleAction(event);
133
+ break;
134
+ case "alert":
135
+ await this.executeAlertAction(event);
136
+ break;
137
+ case "log":
138
+ await this.executeLogAction(event);
139
+ break;
140
+ default:
141
+ console.log(`[Security Monitor] Action ${type} queued for manual processing`);
142
+ }
143
+ action.result = "success";
144
+ action.details += " - executed successfully";
145
+ }
146
+ catch (error) {
147
+ action.result = "failure";
148
+ action.details += ` - failed: ${error instanceof Error ? error.message : String(error)}`;
149
+ console.error(`[Security Monitor] Action ${type} failed:`, error);
150
+ }
151
+ return action;
152
+ }
153
+ /**
154
+ * Execute block action
155
+ */
156
+ async executeBlockAction(event) {
157
+ if (event.details.ipAddress) {
158
+ console.log(`[Security Monitor] Blocking IP: ${event.details.ipAddress}`);
159
+ // In a real implementation, this would interface with firewall/load balancer
160
+ this.emit("ip-blocked", { ip: event.details.ipAddress, reason: event.description });
161
+ }
162
+ }
163
+ /**
164
+ * Execute throttle action
165
+ */
166
+ async executeThrottleAction(event) {
167
+ if (event.details.userId) {
168
+ console.log(`[Security Monitor] Throttling user: ${event.details.userId}`);
169
+ // In a real implementation, this would apply rate limiting
170
+ this.emit("user-throttled", { userId: event.details.userId, reason: event.description });
171
+ }
172
+ }
173
+ /**
174
+ * Execute alert action
175
+ */
176
+ async executeAlertAction(event) {
177
+ console.log(`[Security Monitor] Alert triggered for event: ${event.id}`);
178
+ this.emit("security-alert", event);
179
+ }
180
+ /**
181
+ * Execute log action
182
+ */
183
+ async executeLogAction(event) {
184
+ console.log(`[Security Monitor] Enhanced logging for event: ${event.id}`);
185
+ // Additional detailed logging would go here
186
+ }
187
+ /**
188
+ * Create security alert
189
+ */
190
+ async createAlert(event) {
191
+ const alert = {
192
+ id: SecurityUtils.generateSecureToken(16),
193
+ eventId: event.id,
194
+ timestamp: new Date(),
195
+ severity: event.severity,
196
+ title: `Security Alert: ${event.type}`,
197
+ description: event.description,
198
+ category: event.type,
199
+ affectedSystems: [event.source],
200
+ indicators: this.extractIndicators(event),
201
+ recommendations: this.generateRecommendations(event),
202
+ status: "new",
203
+ };
204
+ this.alerts.push(alert);
205
+ console.log(`[Security Monitor] Created ${alert.severity} alert: ${alert.title}`);
206
+ this.emit("alert-created", alert);
207
+ return alert;
208
+ }
209
+ /**
210
+ * Extract indicators from security event
211
+ */
212
+ extractIndicators(event) {
213
+ const indicators = [];
214
+ if (event.details.ipAddress) {
215
+ indicators.push({
216
+ type: "ip-address",
217
+ value: event.details.ipAddress,
218
+ confidence: 0.8,
219
+ });
220
+ }
221
+ if (event.details.userAgent) {
222
+ indicators.push({
223
+ type: "user-agent",
224
+ value: event.details.userAgent,
225
+ confidence: 0.6,
226
+ });
227
+ }
228
+ if (event.details.endpoint) {
229
+ indicators.push({
230
+ type: "endpoint",
231
+ value: event.details.endpoint,
232
+ confidence: 0.7,
233
+ });
234
+ }
235
+ return indicators;
236
+ }
237
+ /**
238
+ * Generate recommendations for event
239
+ */
240
+ generateRecommendations(event) {
241
+ const recommendations = [];
242
+ switch (event.type) {
243
+ case "authentication":
244
+ recommendations.push("Review authentication logs for patterns");
245
+ recommendations.push("Consider implementing multi-factor authentication");
246
+ if (event.severity === "high" || event.severity === "critical") {
247
+ recommendations.push("Temporarily block suspicious IP addresses");
248
+ }
249
+ break;
250
+ case "authorization":
251
+ recommendations.push("Review user permissions and access controls");
252
+ recommendations.push("Audit privilege escalation attempts");
253
+ break;
254
+ case "input-validation":
255
+ recommendations.push("Review input validation rules");
256
+ recommendations.push("Update WAF rules if applicable");
257
+ break;
258
+ case "data-access":
259
+ recommendations.push("Review data access patterns");
260
+ recommendations.push("Implement data loss prevention measures");
261
+ break;
262
+ case "system":
263
+ recommendations.push("Check system integrity");
264
+ recommendations.push("Review system logs for correlating events");
265
+ break;
266
+ case "anomaly":
267
+ recommendations.push("Investigate unusual patterns");
268
+ recommendations.push("Tune anomaly detection thresholds");
269
+ break;
270
+ }
271
+ return recommendations;
272
+ }
273
+ /**
274
+ * Check for suspicious activity from IP
275
+ */
276
+ async checkSuspiciousActivity(ipAddress) {
277
+ const recentEvents = this.events.filter((event) => event.details.ipAddress === ipAddress && event.timestamp.getTime() > Date.now() - 3600000);
278
+ // Multiple failed authentication attempts
279
+ const failedAuth = recentEvents.filter((event) => event.type === "authentication" && event.severity === "high");
280
+ if (failedAuth.length > 5) {
281
+ return true;
282
+ }
283
+ // Multiple different user attempts from same IP
284
+ const userIds = new Set(recentEvents.map((event) => event.details.userId).filter(Boolean));
285
+ if (userIds.size > 10) {
286
+ return true;
287
+ }
288
+ return false;
289
+ }
290
+ /**
291
+ * Get failed authentication attempts for user
292
+ */
293
+ async getFailedAuthAttempts(userId) {
294
+ const recentEvents = this.events.filter((event) => event.type === "authentication" &&
295
+ event.details.userId === userId &&
296
+ event.severity === "high" &&
297
+ event.timestamp.getTime() > Date.now() - 900000);
298
+ return recentEvents.length;
299
+ }
300
+ /**
301
+ * Check for anomalies
302
+ */
303
+ async checkForAnomalies(event) {
304
+ for (const pattern of this.anomalyPatterns) {
305
+ if (!pattern.enabled)
306
+ continue;
307
+ if (await this.matchesAnomalyPattern(event, pattern)) {
308
+ await this.logSecurityEvent({
309
+ type: "anomaly",
310
+ severity: "medium",
311
+ source: "anomaly-detection",
312
+ description: `Anomaly detected: ${pattern.description}`,
313
+ riskScore: 5,
314
+ details: {
315
+ metadata: { pattern: pattern.pattern, patternId: pattern.id, originalEvent: event.id },
316
+ },
317
+ });
318
+ }
319
+ }
320
+ }
321
+ /**
322
+ * Check if event matches anomaly pattern
323
+ */
324
+ async matchesAnomalyPattern(event, pattern) {
325
+ // Simplified pattern matching - in practice this would be more sophisticated
326
+ const timeWindow = Date.now() - pattern.timeWindow;
327
+ const relatedEvents = this.events.filter((e) => e.timestamp.getTime() > timeWindow && e.type === event.type);
328
+ switch (pattern.type) {
329
+ case "traffic":
330
+ return relatedEvents.length > pattern.threshold;
331
+ case "authentication":
332
+ return event.type === "authentication" && relatedEvents.length > pattern.threshold;
333
+ case "access":
334
+ return event.type === "data-access" && relatedEvents.length > pattern.threshold;
335
+ case "behavior":
336
+ // Check for unusual user behavior patterns
337
+ if (event.details.userId) {
338
+ const userEvents = relatedEvents.filter((e) => e.details.userId === event.details.userId);
339
+ return userEvents.length > pattern.threshold;
340
+ }
341
+ return false;
342
+ default:
343
+ return false;
344
+ }
345
+ }
346
+ /**
347
+ * Initialize default anomaly patterns
348
+ */
349
+ initializeAnomalyPatterns() {
350
+ this.anomalyPatterns = [
351
+ {
352
+ id: "high-auth-failures",
353
+ type: "authentication",
354
+ pattern: "failed-auth-attempts",
355
+ threshold: 10,
356
+ timeWindow: 300000, // 5 minutes
357
+ description: "High number of authentication failures",
358
+ enabled: true,
359
+ },
360
+ {
361
+ id: "unusual-access-pattern",
362
+ type: "access",
363
+ pattern: "data-access-spike",
364
+ threshold: 50,
365
+ timeWindow: 900000, // 15 minutes
366
+ description: "Unusual data access pattern",
367
+ enabled: true,
368
+ },
369
+ {
370
+ id: "traffic-spike",
371
+ type: "traffic",
372
+ pattern: "request-volume",
373
+ threshold: 100,
374
+ timeWindow: 300000, // 5 minutes
375
+ description: "Traffic volume spike",
376
+ enabled: true,
377
+ },
378
+ {
379
+ id: "user-behavior-anomaly",
380
+ type: "behavior",
381
+ pattern: "user-activity",
382
+ threshold: 20,
383
+ timeWindow: 3600000, // 1 hour
384
+ description: "Unusual user behavior pattern",
385
+ enabled: true,
386
+ },
387
+ ];
388
+ }
389
+ /**
390
+ * Collect security metrics
391
+ */
392
+ collectMetrics() {
393
+ const now = new Date();
394
+ const hourAgo = new Date(now.getTime() - 3600000);
395
+ const recentEvents = this.events.filter((event) => event.timestamp > hourAgo);
396
+ const recentAlerts = this.alerts.filter((alert) => alert.timestamp > hourAgo);
397
+ const metrics = {
398
+ timestamp: now,
399
+ events: {
400
+ total: recentEvents.length,
401
+ byType: this.groupBy(recentEvents, "type"),
402
+ bySeverity: this.groupBy(recentEvents, "severity"),
403
+ },
404
+ threats: {
405
+ blocked: recentEvents.filter((e) => e.actions.some((a) => a.type === "block")).length,
406
+ detected: recentEvents.filter((e) => e.riskScore > 5).length,
407
+ investigated: recentAlerts.filter((a) => a.status === "investigating").length,
408
+ },
409
+ alerts: {
410
+ new: recentAlerts.filter((a) => a.status === "new").length,
411
+ resolved: recentAlerts.filter((a) => a.status === "resolved").length,
412
+ falsePositives: recentAlerts.filter((a) => a.status === "false-positive").length,
413
+ },
414
+ performance: {
415
+ responseTime: this.calculateAverageResponseTime(recentEvents),
416
+ detectionRate: this.calculateDetectionRate(recentEvents),
417
+ falsePositiveRate: this.calculateFalsePositiveRate(recentAlerts),
418
+ },
419
+ };
420
+ this.metrics.push(metrics);
421
+ // Keep only last 24 hours of metrics
422
+ const dayAgo = new Date(now.getTime() - 86400000);
423
+ this.metrics = this.metrics.filter((m) => m.timestamp > dayAgo);
424
+ this.emit("metrics-collected", metrics);
425
+ }
426
+ /**
427
+ * Group array by property
428
+ */
429
+ groupBy(array, property) {
430
+ return array.reduce((acc, item) => {
431
+ const key = item[property] || "unknown";
432
+ acc[key] = (acc[key] || 0) + 1;
433
+ return acc;
434
+ }, {});
435
+ }
436
+ /**
437
+ * Calculate average response time for security events
438
+ */
439
+ calculateAverageResponseTime(events) {
440
+ const handledEvents = events.filter((e) => e.handled && e.actions.length > 0);
441
+ if (handledEvents.length === 0)
442
+ return 0;
443
+ const totalTime = handledEvents.reduce((sum, event) => {
444
+ const firstAction = event.actions[0];
445
+ if (firstAction) {
446
+ return sum + (firstAction.timestamp.getTime() - event.timestamp.getTime());
447
+ }
448
+ return sum;
449
+ }, 0);
450
+ return totalTime / handledEvents.length;
451
+ }
452
+ /**
453
+ * Calculate detection rate
454
+ */
455
+ calculateDetectionRate(events) {
456
+ const totalEvents = events.length;
457
+ if (totalEvents === 0)
458
+ return 1;
459
+ const detectedEvents = events.filter((e) => e.handled || e.riskScore > 3).length;
460
+ return detectedEvents / totalEvents;
461
+ }
462
+ /**
463
+ * Calculate false positive rate
464
+ */
465
+ calculateFalsePositiveRate(alerts) {
466
+ const totalAlerts = alerts.length;
467
+ if (totalAlerts === 0)
468
+ return 0;
469
+ const falsePositives = alerts.filter((a) => a.status === "false-positive").length;
470
+ return falsePositives / totalAlerts;
471
+ }
472
+ /**
473
+ * Add threat intelligence
474
+ */
475
+ addThreatIntelligence(threat) {
476
+ this.threatIntel.set(threat.value, threat);
477
+ console.log(`[Security Monitor] Added threat intelligence: ${threat.type} - ${threat.value}`);
478
+ }
479
+ /**
480
+ * Remove threat intelligence
481
+ */
482
+ removeThreatIntelligence(value) {
483
+ const removed = this.threatIntel.delete(value);
484
+ if (removed) {
485
+ console.log(`[Security Monitor] Removed threat intelligence: ${value}`);
486
+ }
487
+ return removed;
488
+ }
489
+ /**
490
+ * Update alert status
491
+ */
492
+ updateAlertStatus(alertId, status, assignee) {
493
+ const alert = this.alerts.find((a) => a.id === alertId);
494
+ if (!alert) {
495
+ return false;
496
+ }
497
+ alert.status = status;
498
+ if (assignee) {
499
+ alert.assignee = assignee;
500
+ }
501
+ if (status === "resolved") {
502
+ alert.resolution = {
503
+ timestamp: new Date(),
504
+ action: "manual-resolution",
505
+ details: "Alert marked as resolved",
506
+ };
507
+ }
508
+ console.log(`[Security Monitor] Updated alert ${alertId} status to ${status}`);
509
+ this.emit("alert-updated", alert);
510
+ return true;
511
+ }
512
+ /**
513
+ * Get security events
514
+ */
515
+ getEvents(options = {}) {
516
+ let events = [...this.events];
517
+ if (options.since) {
518
+ events = events.filter((e) => e.timestamp >= options.since);
519
+ }
520
+ if (options.severity) {
521
+ events = events.filter((e) => e.severity === options.severity);
522
+ }
523
+ if (options.type) {
524
+ events = events.filter((e) => e.type === options.type);
525
+ }
526
+ // Sort by timestamp (newest first)
527
+ events.sort((a, b) => b.timestamp.getTime() - a.timestamp.getTime());
528
+ if (options.offset) {
529
+ events = events.slice(options.offset);
530
+ }
531
+ if (options.limit) {
532
+ events = events.slice(0, options.limit);
533
+ }
534
+ return events;
535
+ }
536
+ /**
537
+ * Get security alerts
538
+ */
539
+ getAlerts(options = {}) {
540
+ let alerts = [...this.alerts];
541
+ if (options.since) {
542
+ alerts = alerts.filter((a) => a.timestamp >= options.since);
543
+ }
544
+ if (options.severity) {
545
+ alerts = alerts.filter((a) => a.severity === options.severity);
546
+ }
547
+ if (options.status) {
548
+ alerts = alerts.filter((a) => a.status === options.status);
549
+ }
550
+ // Sort by timestamp (newest first)
551
+ alerts.sort((a, b) => b.timestamp.getTime() - a.timestamp.getTime());
552
+ if (options.offset) {
553
+ alerts = alerts.slice(options.offset);
554
+ }
555
+ if (options.limit) {
556
+ alerts = alerts.slice(0, options.limit);
557
+ }
558
+ return alerts;
559
+ }
560
+ /**
561
+ * Get security metrics
562
+ */
563
+ getMetrics(options = {}) {
564
+ let metrics = [...this.metrics];
565
+ if (options.since) {
566
+ metrics = metrics.filter((m) => m.timestamp >= options.since);
567
+ }
568
+ if (options.until) {
569
+ metrics = metrics.filter((m) => m.timestamp <= options.until);
570
+ }
571
+ return metrics.sort((a, b) => a.timestamp.getTime() - b.timestamp.getTime());
572
+ }
573
+ /**
574
+ * Get system status
575
+ */
576
+ getStatus() {
577
+ const today = new Date();
578
+ today.setHours(0, 0, 0, 0);
579
+ const eventsToday = this.events.filter((e) => e.timestamp >= today).length;
580
+ const alertsOpen = this.alerts.filter((a) => a.status === "new" || a.status === "investigating").length;
581
+ const threatsBlocked = this.events.filter((e) => e.timestamp >= today && e.actions.some((a) => a.type === "block")).length;
582
+ let systemHealth = "healthy";
583
+ if (alertsOpen > 10)
584
+ systemHealth = "critical";
585
+ else if (alertsOpen > 5 || eventsToday > 100)
586
+ systemHealth = "degraded";
587
+ return {
588
+ monitoring: this.isMonitoring,
589
+ eventsToday,
590
+ alertsOpen,
591
+ threatsBlocked,
592
+ systemHealth,
593
+ };
594
+ }
595
+ }
596
+ //# sourceMappingURL=SecurityMonitoring.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SecurityMonitoring.js","sourceRoot":"","sources":["../../src/security/SecurityMonitoring.ts"],"names":[],"mappings":"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"}