-
Notifications
You must be signed in to change notification settings - Fork 1
Feature/devsecops demo 03 #65
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}\");`); |
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 20 days ago To fix the issue, we should handle the exception properly. This can involve logging the error, providing a meaningful message, or taking corrective action. In this case, since the code is attempting to access elements of a list, an
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 20 days ago To fix the issue, we will replace the bare For the second occurrence on line 16, where another 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 20 days ago To fix the issue, 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.
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
#some imports | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
import telnetlib | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Check noticeCode scanning / CodeQL Unused import Note
Import of 'telnetlib' is not used.
Copilot AutofixAI 20 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.
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
import ftplib | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Check noticeCode scanning / CodeQL Unused import Note
Import of 'ftplib' is not used.
Copilot AutofixAI 20 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