Skip to content

Commit c2cccc1

Browse files
committed
preview
1 parent 4833b43 commit c2cccc1

File tree

214 files changed

+9885
-3260
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

214 files changed

+9885
-3260
lines changed

.idea/gradle.xml

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/misc.xml

Lines changed: 3 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

build.gradle.kts

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,19 +5,28 @@ plugins {
55
}
66

77
group = "com.skgroup"
8-
version = "1.0-SNAPSHOT"
8+
version = "1.0"
99

1010
repositories {
1111
mavenCentral()
1212
}
1313

14+
dependencies {
15+
implementation("me.gosimple:nbvcxz:1.5.1")
16+
// https://mvnrepository.com/artifact/org.jboss.windup.decompiler/decompiler-fernflower
17+
implementation("org.jboss.windup.decompiler:decompiler-fernflower:6.3.9.Final")
18+
implementation("org.apache.maven:maven-model:3.6.3")
19+
implementation("org.apache.maven:maven-model-builder:3.6.3")
20+
}
21+
22+
1423
// Configure Gradle IntelliJ Plugin
1524
// Read more: https://plugins.jetbrains.com/docs/intellij/tools-gradle-intellij-plugin.html
1625
intellij {
1726
version.set("2023.2.6")
1827
type.set("IC") // Target IDE Platform
1928

20-
plugins.set(listOf(/* Plugin Dependencies */))
29+
plugins.set(listOf("Git4Idea", "java"))
2130
}
2231

2332
tasks {
Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
11
package org.skgroup.securityinspector.enums
22

3-
class VulnElemType {
3+
enum class VulnElemType {
4+
ASSIGNMENT_EXPRESSION,
5+
LOCAL_VARIABLE,
6+
CLASS_FIELD
47
}

src/main/kotlin/org/skgroup/securityinspector/enums/VulnType.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package org.skgroup.securityinspector.utils
1+
package org.skgroup.securityinspector.enums
22

33
enum class VulnType {
44

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,14 @@
11
package org.skgroup.securityinspector.enums
22

3-
class XmlFactory {
3+
enum class XmlFactory {
4+
DOCUMENT_BUILDER_FACTORY,
5+
SAX_PARSER_FACTORY,
6+
SAX_TRANSFORMER_FACTORY,
7+
SAX_BUILDER,
8+
SAX_READER,
9+
XML_READER_FACTORY,
10+
SCHEMA_FACTORY,
11+
XML_INPUT_FACTORY,
12+
TRANSFORMER_FACTORY,
13+
VALIDATOR_OF_SCHEMA
414
}

src/main/kotlin/org/skgroup/securityinspector/inspectors/BaseLocalInspectionTool.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1-
package com.skgroup.securityinspector.inspectors
1+
package org.skgroup.securityinspector.inspectors
22

33
import com.intellij.codeInspection.AbstractBaseJavaLocalInspectionTool
44
import com.intellij.psi.*
5-
import com.skgroup.securityinspector.utils.SecExpressionUtils
6-
import com.skgroup.securityinspector.visitors.BaseFixElementWalkingVisitor
75
import org.apache.commons.codec.digest.MurmurHash3
6+
import org.skgroup.securityinspector.utils.SecExpressionUtils
7+
import org.skgroup.securityinspector.visitors.BaseFixElementWalkingVisitor
88

99
abstract class BaseLocalInspectionTool : AbstractBaseJavaLocalInspectionTool() {
1010

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,13 @@
11
package org.skgroup.securityinspector.inspectors
22

3+
import com.intellij.codeInspection.ProblemsHolder
4+
import com.intellij.psi.PsiFile
5+
36
interface InspectionTool {
7+
/**
8+
* 针对给定的 PsiFile 运行检查器
9+
* @param psiFile 目标 PsiFile
10+
* @param problemsHolder 用于收集问题
11+
*/
12+
fun inspectFile(psiFile: PsiFile, problemsHolder: ProblemsHolder)
413
}

src/main/kotlin/org/skgroup/securityinspector/rules/dos/NettyResponseSplitting.kt

Lines changed: 14 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,21 @@
1-
package com.skgroup.securityinspector.rules.dos
1+
package org.skgroup.securityinspector.rules.dos
22

3-
import com.intellij.codeInsight.completion.ml.JavaCompletionFeatures
43
import com.intellij.codeInspection.LocalQuickFix
54
import com.intellij.codeInspection.ProblemDescriptor
65
import com.intellij.codeInspection.ProblemHighlightType
76
import com.intellij.codeInspection.ProblemsHolder
87
import com.intellij.openapi.project.Project
98
import com.intellij.psi.*
10-
import com.skgroup.securityinspector.inspectors.BaseLocalInspectionTool
11-
import com.skgroup.securityinspector.utils.InspectionBundle
12-
import com.skgroup.securityinspector.utils.SecExpressionUtils
13-
import org.jetbrains.annotations.Nls
9+
import org.skgroup.securityinspector.inspectors.BaseLocalInspectionTool
10+
import org.skgroup.securityinspector.utils.InspectionBundle
11+
import org.skgroup.securityinspector.utils.SecExpressionUtils
12+
import org.skgroup.securityinspector.inspectors.InspectionTool
1413

15-
/**
16-
* 1051: Netty响应拆分攻击
17-
*
18-
* ref:
19-
* (1) https://github.com/github/codeql/blob/main/java/ql/src/Security/CWE/CWE-113/NettyResponseSplitting.java
20-
* (2) http://www.infosecwriters.com/Papers/DCrab_HTTP_Response.pdf
21-
*/
22-
const val NETTY_RESPONSE_MESSAGE = "netty.response.splitting.msg"
23-
const val NETTY_RESPONSE_FIX = "netty.response.splitting.fix"
24-
25-
class NettyResponseSplitting : BaseLocalInspectionTool() {
14+
class NettyResponseSplitting : BaseLocalInspectionTool(), InspectionTool {
2615

2716
companion object {
28-
private val MESSAGE = InspectionBundle.message(NETTY_RESPONSE_MESSAGE)
29-
private val QUICK_FIX_NAME = InspectionBundle.message(NETTY_RESPONSE_FIX)
17+
private val MESSAGE = InspectionBundle.message("vuln.massage.NettyResponseSplittingRisk")
18+
private val QUICK_FIX_NAME = InspectionBundle.message("vuln.fix.NettyResponseSplittingRisk")
3019
}
3120

3221
override fun buildVisitor(holder: ProblemsHolder, isOnTheFly: Boolean): PsiElementVisitor {
@@ -48,9 +37,6 @@ class NettyResponseSplitting : BaseLocalInspectionTool() {
4837
}
4938
}
5039

51-
/**
52-
* 通用方法:检查表达式是否有问题,并注册问题
53-
*/
5440
private fun checkForProblem(
5541
expression: PsiNewExpression,
5642
qualifiedName: String,
@@ -60,7 +46,7 @@ class NettyResponseSplitting : BaseLocalInspectionTool() {
6046
if (SecExpressionUtils.hasFullQualifiedName(expression, qualifiedName)) {
6147
expression.argumentList?.expressions?.let { args ->
6248
if (args.size > argIndex && args[argIndex] is PsiLiteralExpression &&
63-
JavaCompletionFeatures.JavaKeyword.FALSE == (args[argIndex] as PsiLiteralExpression).value
49+
(args[argIndex] as PsiLiteralExpression).value == false
6450
) {
6551
holder.registerProblem(
6652
expression,
@@ -73,9 +59,7 @@ class NettyResponseSplitting : BaseLocalInspectionTool() {
7359
}
7460
}
7561

76-
/**
77-
* 快速修复类
78-
*/
62+
7963
class NettyResponseSplittingQuickFix(private val fixArgIndex: Int) : LocalQuickFix {
8064

8165
override fun getFamilyName(): String {
@@ -92,4 +76,8 @@ class NettyResponseSplitting : BaseLocalInspectionTool() {
9276
}
9377
}
9478
}
79+
80+
override fun inspectFile(psiFile: PsiFile, problemsHolder: ProblemsHolder) {
81+
psiFile.accept(buildVisitor(problemsHolder, false))
82+
}
9583
}

src/main/kotlin/org/skgroup/securityinspector/rules/dos/PatternDOS.kt

Lines changed: 6 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,39 +1,20 @@
1-
package com.skgroup.securityinspector.rules.dos
1+
package org.skgroup.securityinspector.rules.dos
22

33
import com.intellij.codeInspection.ProblemHighlightType
44
import com.intellij.codeInspection.ProblemsHolder
55
import com.intellij.psi.*
66
import com.siyeh.ig.psiutils.MethodCallUtils
7-
import com.skgroup.securityinspector.inspectors.BaseLocalInspectionTool
8-
import com.skgroup.securityinspector.utils.InspectionBundle
9-
import com.skgroup.securityinspector.utils.SecExpressionUtils
7+
import org.skgroup.securityinspector.inspectors.BaseLocalInspectionTool
8+
import org.skgroup.securityinspector.utils.InspectionBundle
9+
import org.skgroup.securityinspector.utils.SecExpressionUtils
1010
import org.jetbrains.annotations.NotNull
11-
import org.jetbrains.annotations.Nullable
1211
import java.util.regex.Pattern
13-
/**
14-
* 1039
15-
* 正则表达式拒绝服务攻击 (RegexDos)
16-
*
17-
* 当编写校验的正则表达式存在缺陷时,攻击者可以构造特殊的字符串来大量消耗服务器的资源,造成服务中断或停止。
18-
* ref: https://cloud.tencent.com/developer/article/1041326
19-
*
20-
* check:
21-
* java.util.regex.Pattern#compile args:0
22-
* java.util.regex.Pattern#matches args:0
23-
*
24-
* fix:
25-
* (1) 优化正则表达式
26-
* (2) 使用 com.google.re2j 库
27-
*
28-
* notes:
29-
* `isExponentialRegex` 方法来源于 CodeQL
30-
*/
31-
const val PATTERN_DOS_MESSAGE = "pattern.matches.type.msg"
12+
3213

3314
class PatternDOS : BaseLocalInspectionTool() {
3415

3516
companion object {
36-
private val MESSAGE = InspectionBundle.message(PATTERN_DOS_MESSAGE)
17+
private val MESSAGE = InspectionBundle.message("vuln.massage.PatternMatchesDOS")
3718

3819
/**
3920
* 检查是否为指数型正则表达式
@@ -69,10 +50,6 @@ class PatternDOS : BaseLocalInspectionTool() {
6950
}
7051
}
7152

72-
/**
73-
* 提取字面量表达式
74-
*/
75-
@Nullable
7653
private fun getLiteralExpression(expression: PsiExpression?): PsiLiteralExpression? {
7754
return when (expression) {
7855
is PsiReferenceExpression -> {

0 commit comments

Comments
 (0)