UNPKG

node-red-contrib-wger

Version:

Node-RED nodes for integrating with wger workout and fitness tracker API

121 lines (97 loc) 5.2 kB
# Security Fix Report: Input Validation ## Issue: Missing Comprehensive Input Validation in Operations **Priority:** MEDIUM **OWASP Category:** A03:2021 – Injection ## Summary Fixed missing comprehensive input validation in various operation files within the `nodes/operations/` directory. While the codebase had an excellent `InputValidator` class and comprehensive validation schemas, some operations were not consistently applying proper input validation before making API calls. ## Vulnerabilities Fixed ### 1. Nutrition Operations Previously, multiple nutrition operations were missing validation schemas: - `listMeals` - No schema validation - `createMeal` - Only basic required field check - `updateMeal` - No schema validation - `deleteMeal` - No schema validation - `listMealItems` - No schema validation - `createMealItem` - Only basic required field check - `updateMealItem` - No schema validation - `deleteMealItem` - No schema validation - `searchIngredients` - Only basic required field check - `getIngredient` - No schema validation **Fixed:** All operations now use comprehensive validation schemas ### 2. Missing Operations Several operations had validation schemas defined but were not implemented: - Nutrition diary operations (list, create, update, delete) - Ingredient search by barcode - Weight units and ingredient categories - Workout logs operations - Schedule operations **Fixed:** Implemented all missing operations with proper validation ### 3. Node Refactoring - Refactored `wger-weight.js` to use OperationRegistry pattern with validation - Refactored `wger-user.js` to use OperationRegistry pattern with validation - Created `weight-operations.js` and `user-operations.js` with validation ## Security Improvements ### Input Validation Features The InputValidator now consistently provides: - **XSS Prevention**: Automatic HTML tag stripping and script injection prevention - **SQL Injection Prevention**: Removes dangerous SQL patterns and comments - **Path Traversal Prevention**: Blocks `../` and `..\\` patterns in all inputs - **Type Safety**: Strict type validation and safe coercion - **Range Validation**: Min/max values for numbers, length limits for strings - **Format Validation**: Regex patterns for IDs, barcodes, emails, URLs - **Prototype Pollution Prevention**: Silently filters `__proto__`, `constructor`, `prototype` - **Enum Validation**: Ensures values match allowed options - **Array Validation**: Item count limits and individual item validation ## Files Changed ### Created - `/workspace/node-red-contrib-wger/nodes/operations/weight-operations.js` - `/workspace/node-red-contrib-wger/nodes/operations/user-operations.js` - `/workspace/node-red-contrib-wger/test/security/input-validation-security_spec.js` ### Modified - `/workspace/node-red-contrib-wger/nodes/operations/nutrition-operations.js` - Added validation schemas to all operations - Implemented missing operations - `/workspace/node-red-contrib-wger/nodes/operations/workout-operations.js` - Added missing workout log operations - Added schedule operations - `/workspace/node-red-contrib-wger/utils/constants.js` - Added missing API endpoints for new operations - `/workspace/node-red-contrib-wger/nodes/wger-weight.js` - Refactored to use OperationRegistry pattern - Ensured all operations use validation - `/workspace/node-red-contrib-wger/nodes/wger-user.js` - Refactored to use OperationRegistry pattern - Ensured all operations use validation ## Testing - Created comprehensive security test suite (`input-validation-security_spec.js`) - Tests cover XSS, SQL injection, path traversal, type coercion, and more - Existing operation tests continue to pass ## Validation Coverage ### Before Fix - **Exercise Operations**: ✅ Full validation (already implemented) - **Nutrition Operations**: ⚠️ Partial validation (40% coverage) - **Workout Operations**: ✅ Full validation (already implemented) - **Weight Operations**: ⚠️ Manual validation (not using schemas) - **User Operations**: ⚠️ Manual validation (not using schemas) - **API Operations**: ✅ Full validation (already implemented) ### After Fix - **Exercise Operations**: ✅ Full validation - **Nutrition Operations**: ✅ Full validation (100% coverage) - **Workout Operations**: ✅ Full validation (+ new operations) - **Weight Operations**: ✅ Full validation (using schemas) - **User Operations**: ✅ Full validation (using schemas) - **API Operations**: ✅ Full validation ## Recommendations 1. **Regular Security Audits**: Run the security test suite regularly 2. **Schema Updates**: Keep validation schemas updated with API changes 3. **New Operations**: Always use OperationBuilders with validation schemas 4. **Custom Validations**: Add operation-specific validation rules as needed 5. **Error Messages**: Avoid exposing sensitive information in validation errors ## Compliance This fix addresses: - **OWASP A03:2021** - Injection - **OWASP A04:2021** - Insecure Design (validation at boundaries) - **CWE-20** - Improper Input Validation - **CWE-79** - Cross-site Scripting (XSS) - **CWE-89** - SQL Injection - **CWE-22** - Path Traversal