-
Notifications
You must be signed in to change notification settings - Fork 1
Add DevSecOps page with security news and examples; update project dependencies #67
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
FROM alpine:3.14.0 | ||
RUN echo "testuser:x:10999:10999:,,,:/home/testuser:/bin/bash" >> /etc/passwd && echo "testuser::18761:0:99999:7:::" >> /etc/shadow |
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,189 @@ | ||
resource "azurerm_resource_group" "myresourcegroup" { | ||
name = "${var.prefix}-workshop" | ||
location = var.location | ||
|
||
tags = { | ||
environment = "Production" | ||
} | ||
} | ||
|
||
resource "azurerm_virtual_network" "vnet" { | ||
name = "${var.prefix}-vnet" | ||
location = azurerm_resource_group.myresourcegroup.location | ||
address_space = [var.address_space] | ||
resource_group_name = azurerm_resource_group.myresourcegroup.name | ||
} | ||
|
||
resource "azurerm_subnet" "subnet" { | ||
name = "${var.prefix}-subnet" | ||
virtual_network_name = azurerm_virtual_network.vnet.name | ||
resource_group_name = azurerm_resource_group.myresourcegroup.name | ||
address_prefixes = [var.subnet_prefix] | ||
} | ||
|
||
resource "azurerm_network_security_group" "catapp-sg" { | ||
name = "${var.prefix}-sg" | ||
location = var.location | ||
resource_group_name = azurerm_resource_group.myresourcegroup.name | ||
|
||
security_rule { | ||
name = "HTTP" | ||
priority = 100 | ||
direction = "Inbound" | ||
access = "Allow" | ||
protocol = "Tcp" | ||
source_port_range = "*" | ||
destination_port_range = "80" | ||
source_address_prefix = "*" | ||
destination_address_prefix = "*" | ||
} | ||
|
||
security_rule { | ||
name = "HTTPS" | ||
priority = 102 | ||
direction = "Inbound" | ||
access = "Allow" | ||
protocol = "Tcp" | ||
source_port_range = "*" | ||
destination_port_range = "443" | ||
source_address_prefix = "*" | ||
destination_address_prefix = "*" | ||
} | ||
|
||
security_rule { | ||
name = "SSH" | ||
priority = 101 | ||
direction = "Inbound" | ||
access = "Allow" | ||
protocol = "Tcp" | ||
source_port_range = "*" | ||
destination_port_range = "22" | ||
source_address_prefix = "*" | ||
destination_address_prefix = "*" | ||
} | ||
} | ||
Check failureCode scanning / checkov Ensure that HTTP (port 80) access is restricted from the internet Error
Ensure that HTTP (port 80) access is restricted from the internet
Check failureCode scanning / checkov Ensure that SSH access is restricted from the internet Error
Ensure that SSH access is restricted from the internet
|
||
Comment on lines
+24
to
+64
Check failureCode scanning / defsec An inbound network security rule allows traffic from /0. Error
Security group rule allows ingress from public internet.
Comment on lines
+24
to
+64
Check failureCode scanning / defsec An inbound network security rule allows traffic from /0. Error
Security group rule allows ingress from public internet.
Comment on lines
+24
to
+64
Check failureCode scanning / defsec SSH access should not be accessible from the Internet, should be blocked on port 22 Error
Security group rule allows ingress to SSH port from multiple public internet addresses.
|
||
|
||
resource "azurerm_network_interface" "catapp-nic" { | ||
name = "${var.prefix}-catapp-nic" | ||
location = var.location | ||
resource_group_name = azurerm_resource_group.myresourcegroup.name | ||
|
||
ip_configuration { | ||
name = "${var.prefix}ipconfig" | ||
subnet_id = azurerm_subnet.subnet.id | ||
private_ip_address_allocation = "Dynamic" | ||
public_ip_address_id = azurerm_public_ip.catapp-pip.id | ||
} | ||
} | ||
Check noticeCode scanning / checkov Ensure that Network Interfaces don't use public IPs Note
Ensure that Network Interfaces don't use public IPs
|
||
|
||
resource "azurerm_network_interface_security_group_association" "catapp-nic-sg-ass" { | ||
network_interface_id = azurerm_network_interface.catapp-nic.id | ||
network_security_group_id = azurerm_network_security_group.catapp-sg.id | ||
} | ||
|
||
resource "azurerm_public_ip" "catapp-pip" { | ||
name = "${var.prefix}-ip" | ||
location = var.location | ||
resource_group_name = azurerm_resource_group.myresourcegroup.name | ||
allocation_method = "Dynamic" | ||
domain_name_label = "${var.prefix}-meow" | ||
} | ||
|
||
resource "azurerm_virtual_machine" "catapp" { | ||
name = "${var.prefix}-meow" | ||
location = var.location | ||
resource_group_name = azurerm_resource_group.myresourcegroup.name | ||
vm_size = var.vm_size | ||
|
||
network_interface_ids = [azurerm_network_interface.catapp-nic.id] | ||
delete_os_disk_on_termination = "true" | ||
|
||
storage_image_reference { | ||
publisher = var.image_publisher | ||
offer = var.image_offer | ||
sku = var.image_sku | ||
version = var.image_version | ||
} | ||
|
||
storage_os_disk { | ||
name = "${var.prefix}-osdisk" | ||
managed_disk_type = "Standard_LRS" | ||
caching = "ReadWrite" | ||
create_option = "FromImage" | ||
} | ||
|
||
os_profile { | ||
computer_name = var.prefix | ||
admin_username = var.admin_username | ||
admin_password = var.admin_password | ||
} | ||
|
||
os_profile_linux_config { | ||
disable_password_authentication = false | ||
} | ||
|
||
tags = {} | ||
|
||
# Added to allow destroy to work correctly. | ||
depends_on = [azurerm_network_interface_security_group_association.catapp-nic-sg-ass] | ||
} | ||
Check noticeCode scanning / checkov Ensure Azure Instance does not use basic authentication(Use SSH Key Instead) Note
Ensure Azure Instance does not use basic authentication(Use SSH Key Instead)
Check noticeCode scanning / checkov Ensure that Microsoft Antimalware is configured to automatically updates for Virtual Machines Note
Ensure that Microsoft Antimalware is configured to automatically updates for Virtual Machines
Check noticeCode scanning / checkov Ensure that virtual machines are backed up using Azure Backup Note
Ensure that virtual machines are backed up using Azure Backup
|
||
Comment on lines
+92
to
+129
Check failureCode scanning / defsec Password authentication should be disabled on Azure virtual machines Error
Linux virtual machine allows password authentication.
|
||
|
||
# We're using a little trick here so we can run the provisioner without | ||
# destroying the VM. Do not do this in production. | ||
|
||
# If you need ongoing management (Day N) of your virtual machines a tool such | ||
# as Chef or Puppet is a better choice. These tools track the state of | ||
# individual files and can keep them in the correct configuration. | ||
|
||
# Here we do the following steps: | ||
# Sync everything in files/ to the remote VM. | ||
# Set up some environment variables for our script. | ||
# Add execute permissions to our scripts. | ||
# Run the deploy_app.sh script. | ||
resource "null_resource" "configure-cat-app" { | ||
depends_on = [ | ||
azurerm_virtual_machine.catapp, | ||
] | ||
|
||
# Terraform 0.11 | ||
# triggers { | ||
# build_number = "${timestamp()}" | ||
# } | ||
|
||
# Terraform 0.12 | ||
triggers = { | ||
build_number = timestamp() | ||
} | ||
|
||
provisioner "file" { | ||
source = "files/" | ||
destination = "/home/${var.admin_username}/" | ||
|
||
connection { | ||
type = "ssh" | ||
user = var.admin_username | ||
password = var.admin_password | ||
host = azurerm_public_ip.catapp-pip.fqdn | ||
} | ||
} | ||
|
||
provisioner "remote-exec" { | ||
inline = [ | ||
"sudo apt -y update", | ||
"sleep 15", | ||
"sudo apt -y update", | ||
"sudo apt -y install apache2", | ||
"sudo systemctl start apache2", | ||
"sudo chown -R ${var.admin_username}:${var.admin_username} /var/www/html", | ||
"chmod +x *.sh", | ||
"PLACEHOLDER=${var.placeholder} WIDTH=${var.width} HEIGHT=${var.height} PREFIX=${var.prefix} ./deploy_app.sh", | ||
] | ||
|
||
connection { | ||
type = "ssh" | ||
user = var.admin_username | ||
password = var.admin_password | ||
host = azurerm_public_ip.catapp-pip.fqdn | ||
} | ||
} | ||
} |
Original file line number | Diff line number | Diff line change | ||||
---|---|---|---|---|---|---|
@@ -0,0 +1,2 @@ | ||||||
let injection = "Hello, security vulnerabilities!"; | ||||||
eval(`console.log(\"${injection}\");`); | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Using eval with interpolated input can lead to code injection vulnerabilities; avoid eval and use safer alternatives for executing dynamic code.
Suggested change
Copilot uses AI. Check for mistakes. Positive FeedbackNegative Feedback |
Original file line number | Diff line number | Diff line change | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
@@ -0,0 +1,26 @@ | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
#Commented out sample to pass scanning | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
import hashlib | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
print("I am very insecure. Bandit thinks so too.") | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
#B110 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
xs=[1,2,3,4,5,6,7,8] | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
try: | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
print(xs[7]) | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
print(xs[8]) | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
except: pass | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Check noticeCode scanning / CodeQL Empty except Note
'except' clause does nothing but pass and there is no explanatory comment.
Copilot AutofixAI 17 days ago To fix the issue, we need to replace the empty
For this specific case:
Suggested changeset
1
samples/insecure-01.py
Copilot is powered by AI and may make mistakes. Always verify output.
Positive FeedbackNegative Feedback
Refresh and try again.
Check noticeCode scanning / CodeQL Except block handles 'BaseException' Note
Except block directly handles BaseException.
Copilot AutofixAI 17 days ago To fix the issue, we will replace the bare
Suggested changeset
1
samples/insecure-01.py
Copilot is powered by AI and may make mistakes. Always verify output.
Positive FeedbackNegative Feedback
Refresh and try again.
Check warningCode scanning / Bandit Try, Except, Pass detected. Warning
Try, Except, Pass detected.
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ys=[1, 2, None, None] | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
for y in ys: | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
try: | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
print(str(y+3)) #TypeErrors ahead | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
except: continue #not how to handle them | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Check noticeCode scanning / CodeQL Except block handles 'BaseException' Note
Except block directly handles BaseException.
Copilot AutofixAI 17 days ago To fix the issue, the Additionally, the
Suggested changeset
1
samples/insecure-01.py
Copilot is powered by AI and may make mistakes. Always verify output.
Positive FeedbackNegative Feedback
Refresh and try again.
Check warningCode scanning / Bandit Try, Except, Continue detected. Warning
Try, Except, Continue detected.
Comment on lines
+10
to
+16
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Using a bare except clause can hide unexpected errors; consider catching specific exceptions and logging error details for better clarity.
Suggested change
Copilot uses AI. Check for mistakes. Positive FeedbackNegative Feedback |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
#some imports | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
import telnetlib | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Check noticeCode scanning / CodeQL Unused import Note
Import of 'telnetlib' is not used.
Copilot AutofixAI 17 days ago To fix the problem, we should remove the unused
Suggested changeset
1
samples/insecure-01.py
Copilot is powered by AI and may make mistakes. Always verify output.
Positive FeedbackNegative Feedback
Refresh and try again.
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
import ftplib | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Check noticeCode scanning / CodeQL Unused import Note
Import of 'ftplib' is not used.
Copilot AutofixAI 17 days ago To fix the problem, we will remove the unused
Suggested changeset
1
samples/insecure-01.py
Copilot is powered by AI and may make mistakes. Always verify output.
Positive FeedbackNegative Feedback
Refresh and try again.
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
#B303 and B324 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
s = b"I am a string" | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
print("MD5: " +hashlib.md5(s).hexdigest()) | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Check warningCode scanning / Bandit Use of insecure MD2, MD4, MD5, or SHA1 hash function. Warning
Use of insecure MD2, MD4, MD5, or SHA1 hash function.
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
print("SHA1: " +hashlib.sha1(s).hexdigest()) | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Check warningCode scanning / Bandit Use of insecure MD2, MD4, MD5, or SHA1 hash function. Warning
Use of insecure MD2, MD4, MD5, or SHA1 hash function.
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
print("SHA256: " +hashlib.sha256(s).hexdigest()) |
Check failure
Code scanning / defsec
An inbound network security rule allows traffic from /0. Error