|
--- |
|
base_model: Qwen/Qwen2.5-Coder-0.5B-Instruct |
|
tags: |
|
- ellora |
|
- lora |
|
- security |
|
- secure-code |
|
- vulnerability-prevention |
|
- grpo |
|
- preference-learning |
|
- semgrep |
|
- owasp |
|
- cwe |
|
- peft |
|
- code-generation |
|
- python |
|
library_name: peft |
|
license: apache-2.0 |
|
language: |
|
- en |
|
- code |
|
pipeline_tag: text-generation |
|
inference: true |
|
model_type: qwen2 |
|
datasets: |
|
- codelion/Qwen2.5-Coder-0.5B-Instruct-security-preference |
|
--- |
|
|
|
# codelion/Qwen2.5-Coder-0.5B-Instruct-security-grpo-lora |
|
|
|
## π Security-First Code Generation LoRA |
|
|
|
This LoRA adapter enhances Qwen/Qwen2.5-Coder-0.5B-Instruct to generate secure code by default, trained using GRPO (Group Relative Policy Optimization) with automated security analysis via Semgrep. |
|
|
|
## π― Key Features |
|
|
|
- **Automated Security Analysis**: Uses Semgrep for consistent vulnerability detection |
|
- **Self-Supervised Training**: No manually curated secure/insecure datasets required |
|
- **Comprehensive Coverage**: Addresses OWASP Top 10 and CWE Top 25 vulnerabilities |
|
- **Language Focus**: Specialized for Python security patterns |
|
- **Preference Learning**: GRPO training to prefer secure coding patterns |
|
|
|
## π Performance Metrics |
|
|
|
- **Base Model**: Qwen/Qwen2.5-Coder-0.5B-Instruct |
|
- **Training Method**: GRPO with security-based preferences |
|
- **LoRA Rank**: 64 |
|
- **LoRA Alpha**: 128 |
|
- **Training Samples**: 195 |
|
- **Security Evaluation Pass Rate**: 20.0% |
|
- **Average Security Score**: 0.40 (lower is better) |
|
|
|
### Vulnerability Prevention Results |
|
|
|
| Vulnerability Type | Score | Status | |
|
|-------------------|-------|---------| |
|
| SQL Injection | 0 | β
| |
|
| Command Injection | 0 | β
| |
|
| Path Traversal | 2 | β
| |
|
| Weak Cryptography | 0 | β
| |
|
| Hardcoded Secrets | 0 | β
| |
|
|
|
## π§ Usage |
|
|
|
```python |
|
from transformers import AutoModelForCausalLM, AutoTokenizer |
|
from peft import PeftModel |
|
|
|
# Load base model |
|
model = AutoModelForCausalLM.from_pretrained( |
|
"Qwen/Qwen2.5-Coder-0.5B-Instruct", |
|
torch_dtype="auto", |
|
device_map="auto" |
|
) |
|
tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen2.5-Coder-0.5B-Instruct") |
|
|
|
# Load security LoRA adapter |
|
model = PeftModel.from_pretrained(model, "codelion/Qwen2.5-Coder-0.5B-Instruct-security-grpo-lora") |
|
|
|
# Generate secure code |
|
prompt = '''Write a secure Python function: Create a user login function |
|
that checks username and password against a database''' |
|
|
|
inputs = tokenizer(prompt, return_tensors="pt") |
|
outputs = model.generate(**inputs, max_new_tokens=512, temperature=0.2) |
|
secure_code = tokenizer.decode(outputs[0], skip_special_tokens=True) |
|
print(secure_code) |
|
``` |
|
|
|
## π Expected Output |
|
|
|
The model generates code with security best practices: |
|
|
|
```python |
|
def login_user(username, password): |
|
"""Securely authenticate a user against the database.""" |
|
import bcrypt |
|
import secrets |
|
from sqlalchemy import text |
|
|
|
# Validate inputs |
|
if not username or not password: |
|
return False, "Invalid credentials" |
|
|
|
# Use parameterized query to prevent SQL injection |
|
query = text("SELECT user_id, password_hash FROM users WHERE username = :username") |
|
result = db.execute(query, {"username": username}).fetchone() |
|
|
|
if not result: |
|
# Prevent timing attacks by still checking a dummy password |
|
bcrypt.checkpw(b"dummy", b"$2b$12$dummy.hash.to.prevent.timing") |
|
return False, "Invalid credentials" |
|
|
|
# Verify password using bcrypt |
|
if bcrypt.checkpw(password.encode('utf-8'), result.password_hash): |
|
# Generate secure session token |
|
session_token = secrets.token_urlsafe(32) |
|
return True, session_token |
|
|
|
return False, "Invalid credentials" |
|
``` |
|
|
|
## π‘οΈ Security Patterns Learned |
|
|
|
- **SQL Injection Prevention**: Parameterized queries, prepared statements |
|
- **Password Security**: Bcrypt/Argon2 hashing, no plaintext storage |
|
- **Input Validation**: Comprehensive validation and sanitization |
|
- **Error Handling**: Safe error messages without information disclosure |
|
- **Secure Randomness**: Using `secrets` module instead of `random` |
|
- **Path Security**: Proper path joining and validation |
|
- **Command Injection Prevention**: Avoiding shell=True, using subprocess safely |
|
|
|
## π§ͺ Training Details |
|
|
|
### Data Generation |
|
- **Method**: Self-supervised with Magpie-style generation |
|
- **Scenarios**: 7 security categories |
|
- **Analysis**: Automated using Semgrep security rules |
|
- **Preference Pairs**: Based on security score differences |
|
|
|
### GRPO Training |
|
- **Objective**: Minimize security vulnerabilities while maintaining functionality |
|
- **Reward Signal**: Negative correlation with Semgrep security score |
|
- **Batch Size**: 1 with 8x gradient accumulation |
|
- **Learning Rate**: 3e-06 |
|
- **Epochs**: 5 |
|
|
|
## π Evaluation |
|
|
|
The adapter was evaluated on comprehensive security test cases: |
|
|
|
- **CWE Coverage**: Top 25 most dangerous software weaknesses |
|
- **OWASP Alignment**: Addresses OWASP Top 10 vulnerabilities |
|
- **Practical Scenarios**: Real-world security challenges |
|
- **Pattern Recognition**: Identifies and applies secure coding patterns |
|
|
|
## π Limitations and Considerations |
|
|
|
1. **Language Focus**: Currently optimized for Python; other languages may need additional training |
|
2. **Context Awareness**: Best results with clear security-focused prompts |
|
3. **Not a Security Scanner**: Complements but doesn't replace security tools |
|
4. **Continuous Updates**: Security landscape evolves; periodic retraining recommended |
|
|
|
## π Related Resources |
|
|
|
- **Dataset**: [codelion/Qwen2.5-Coder-0.5B-Instruct-security-preference](https://huggingface.co/datasets/codelion/Qwen2.5-Coder-0.5B-Instruct-security-preference) |
|
- **Base Model**: [Qwen/Qwen2.5-Coder-0.5B-Instruct](https://huggingface.co/Qwen/Qwen2.5-Coder-0.5B-Instruct) |
|
- **Ellora Project**: [GitHub Repository](https://github.com/codelion/ellora) |
|
- **Semgrep**: [Security Analysis Tool](https://semgrep.dev/) |
|
|
|
--- |
|
|
|
*This adapter is part of the [Ellora project](https://github.com/codelion/ellora) - standardized recipes for enhancing LLM capabilities.* |
|
|