Skip to content

Commit 3bb93ef

Browse files
committed
pushC2 and proxy updates
1 parent 652234d commit 3bb93ef

27 files changed

+379
-342
lines changed

CHANGELOG.MD

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,16 @@ All notable changes to this project will be documented in this file.
44
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
55
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
66

7+
## [3.4.24] - 2026-02-18
8+
9+
### Changed
10+
11+
- Updated PushC2 to funnel traffic into one channel instead of two
12+
- Updated socks proxy reads to do a basic burst for read sizes to reduce number of concurrent waiting messages
13+
- this increases throughput for socks traffic with a bit more bursty memory usage
14+
- Updated key reflection in agent messages to omit cwd and impersonation_context fields
15+
- Updated empty BFS paths to be cached as well so non-existent paths aren't recomputed a bunch
16+
717
## [3.4.23] - 2026-02-08
818

919
### Changed

MythicReactUI/CHANGELOG.MD

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,13 @@ All notable changes to this project will be documented in this file.
44
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
55
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
66

7+
## [0.3.100] - 2026-02-18
8+
9+
### Changed
10+
11+
- Updated the eventing page to only stream in updates that match the current filter
12+
- Updated payload parameter array type to start empty
13+
714
## [0.3.99] - 2026-02-10
815

916
### Changed

MythicReactUI/src/components/pages/Callbacks/CallbacksTableEditTriggerOnCheckinDialog.js

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,11 @@ import MythicTextField from "../../MythicComponents/MythicTextField";
1717
export function CallbacksTableEditTriggerOnCheckinDialog(props) {
1818
const [comment, setComment] = React.useState(0);
1919
const onChange = (name, value, error) => {
20-
setComment(parseInt(value));
20+
if(isNaN(parseInt(value))){
21+
setComment(0);
22+
} else {
23+
setComment(parseInt(value));
24+
}
2125
}
2226
useEffect( () => {
2327
setComment(props.trigger_on_checkin_after_time);
@@ -29,8 +33,14 @@ export function CallbacksTableEditTriggerOnCheckinDialog(props) {
2933
<React.Fragment>
3034
<DialogTitle id="form-dialog-title">{"Adjust this callback's trigger threshold"}</DialogTitle>
3135
<DialogContent dividers={true} style={{height: "100%"}}>
32-
<Typography>
33-
{"This adjusts how long, in minutes, this callback must not checkin before finally checking in to trigger an eventing workflow (trigger is callback_checkin). A zero value means never trigger."}
36+
<Typography >
37+
This adjusts how long, in minutes, this callback must <b>not</b> checkin before finally checking in to trigger an <b>eventing workflow</b> (trigger is callback_checkin).
38+
</Typography>
39+
<Typography >
40+
A zero value means never trigger.
41+
</Typography>
42+
<Typography >
43+
If no eventing workflow for <b>callback_checkin</b> that matches the right payload_types and supported_os restrictions, then nothing will happen.
3444
</Typography>
3545
<MythicTextField autoFocus={true} onChange={onChange} type={"number"} value={comment} onEnter={onSubmit} name={"trigger threshold in minutes"} showLabel={false} />
3646
</DialogContent>

MythicReactUI/src/components/pages/CreatePayload/CreatePayloadParameter.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ export function CreatePayloadParameter({onChange, parameter_type, default_value,
5959
const [dictSelectOptions, setDictSelectOptions] = React.useState([]);
6060
const [dictSelectOptionsChoice, setDictSelectOptionsChoice] = React.useState("");
6161
const [dateValue, setDateValue] = React.useState(dayjs(new Date()));
62-
const [arrayValue, setArrayValue] = React.useState([""]);
62+
const [arrayValue, setArrayValue] = React.useState([]);
6363
const [typedArrayValue, setTypedArrayValue] = React.useState([]);
6464
const [fileValue, setFileValue] = React.useState({name: ""});
6565
const [fileMultValue, setFileMultValue] = React.useState([]);

MythicReactUI/src/components/pages/EventFeed/EventFeed.js

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,9 @@ mutation UpdateLevelOperationEventLog($id: Int!) {
9393
}
9494
}
9595
`;
96+
export const levelOptions = [
97+
"All Levels", "warning (unresolved)", "warning (resolved)", "info", "debug", "api", "auth", "agent"
98+
];
9699
export function EventFeed({}){
97100
const [pageData, setPageData] = React.useState({
98101
"totalCount": 0,
@@ -112,7 +115,30 @@ export function EventFeed({}){
112115
updatingPrev[indx] = cur;
113116
return [...updatingPrev];
114117
}
115-
return [...prev, cur];
118+
// only add this if this msg fits into the right current view
119+
switch(level){
120+
case "All Levels":
121+
return [...prev, cur];
122+
case "warning (unresolved)":
123+
if( (cur.warning || cur.level === 'warning') && cur.resolved === false){
124+
return [...prev, cur]
125+
} else {
126+
return [...prev];
127+
}
128+
case "warning (resolved)":
129+
if( (cur.warning || cur.level === 'warning') && cur.resolved === true){
130+
return [...prev, cur];
131+
} else {
132+
return [...prev];
133+
}
134+
default:
135+
if(cur.level === level && !cur.warning){
136+
return [...prev, cur];
137+
} else {
138+
return [...prev];
139+
}
140+
}
141+
//return [...prev, cur];
116142
}, [...operationeventlog]);
117143
newEvents.sort((a,b) => (a.id > b.id) ? -1 : ((b.id > a.id) ? 1 : 0));
118144
setOperationEventLog(newEvents);

MythicReactUI/src/components/pages/EventFeed/EventFeedTable.js

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import MenuItem from '@mui/material/MenuItem';
1414
import Select from '@mui/material/Select';
1515
import Grid from '@mui/material/Grid';
1616
import {alertCount} from "../../../cache";
17+
import {levelOptions} from "./EventFeed";
1718

1819
const EventList = ({onUpdateLevel, onUpdateResolution, operationeventlog}) => {
1920
return (
@@ -31,9 +32,7 @@ export function EventFeedTable(props){
3132
const theme = useTheme();
3233
const [search, setSearch] = React.useState("");
3334
const [level, setLevel] = React.useState("info");
34-
const levelOptions = [
35-
"All Levels", "warning (unresolved)", "warning (resolved)", "info", "debug", "api", "auth", "agent"
36-
];
35+
3736

3837
const handleSearchValueChange = (name, value, error) => {
3938
setSearch(value);

MythicReactUI/src/index.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import {jwtDecode} from 'jwt-decode';
1515
import {meState} from './cache';
1616
import {getSkewedNow} from "./components/utilities/Time";
1717

18-
export const mythicUIVersion = "0.3.99";
18+
export const mythicUIVersion = "0.3.100";
1919

2020
let fetchingNewToken = false;
2121

VERSION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
3.4.23
1+
3.4.24

mythic-docker/src/go.mod

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,9 +60,7 @@ require (
6060
golang.org/x/arch v0.23.0 // indirect
6161
golang.org/x/crypto v0.46.0 // indirect
6262
golang.org/x/net v0.48.0 // indirect
63-
golang.org/x/sync v0.19.0 // indirect
6463
golang.org/x/sys v0.39.0 // indirect
6564
golang.org/x/text v0.32.0 // indirect
66-
golang.org/x/tools v0.40.0 // indirect
6765
google.golang.org/genproto/googleapis/rpc v0.0.0-20251222181119-0a764e51fe1b // indirect
6866
)

0 commit comments

Comments
 (0)